java xlsm_poi读取excel(xls和xlsx,xlsm)给定单元格内容

这篇博客演示了如何使用Java Apache POI库读取不同类型的Excel文件(xls, xlsx, xlsm)中的特定单元格内容。针对xlsm文件,还展示了读取隐藏sheet页上的Numeric类型数据并转换为String的方法。" 113097306,8075831,Java三目运算符与自动拆箱陷阱解析,"['java', '编程语言', '经验分享']
摘要由CSDN通过智能技术生成

使用到的jar包

ee5f1723f86066ffcc416a3dc0454374.png

xls和xlsx文件要读取的内容均在(2,2)单元格中,且均为String类型(ver3 1.1.3);

xlsm文件要读取sheet名为"システム管理"的(3,2)单元格中的内容,且为Numeric类型(version 3.1),另外"システム管理"sheet页为隐藏sheet页;

注意单元格数据类型不都是String。

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class xls_xlsx_xlsm_ionew {

public static void main(String[] args) throws IOException {

String path = "D:\\8月開発案件\\01:要件定義\\01:要件定義\\04:版数チェック\\Excel\\";

String fileName = "DB一覧";

String fileType = "xlsm";

/*

String fileName = "abc";

String fileType = "xlsx";

*/

/*

String fileName = "fb";

String fileType = "xls";

*/

read(path, fileName, fileType);

}

public static void read(String path, String fileName, String fileType)

throws IOException {

InputStream stream = new FileInputStream(path + fileName + "."

+ fileType);

Workbook wb = null;

if (fileType.equals("xls")) {

wb = new HSSFWorkbook(stream);

// 读取excel中第一个sheet页的(2,2)单元格

// (列,行),从0开始

Sheet sheet = wb.getSheetAt(0);

sheet.getSheetName();

Row row = sheet.getRow(2);

Cell cell = row.getCell(2);

//ver31.1.3

System.out.print(cell.getStringCellValue());

} else if (fileType.equals("xlsx")) {

wb = new XSSFWorkbook(stream);

// 读取excel中第一个sheet页的(2,2)单元格

// (列,行),从0开始

Sheet sheet = wb.getSheetAt(0);

sheet.getSheetName();

Row row = sheet.getRow(2);

Cell cell = row.getCell(2);

//ver31.1.3

System.out.print(cell.getStringCellValue());

} else if (fileType.equals("xlsm")) {

wb = new XSSFWorkbook(stream);

int numOfSheets = wb.getNumberOfSheets();

for (int i = 0; i < numOfSheets; i++) {

Sheet sheet = wb.getSheetAt(i);

String sname = sheet.getSheetName();

if (sname.equals("システム管理")) {

Row row = sheet.getRow(3);

//获取单元格内容的方式一

//cell类型为Numeric,故采用getNumericCellValue()方法

//Cell cell = row.getCell(2);

//version3.1

//System.out.print(cell.getNumericCellValue());

//获取单元格内容的方式二

row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);

//Cannot get a text value from a numeric cell,故先将cell类型设置为String型

System.out.print(row.getCell(2).getStringCellValue());

}

}

} else {

System.out.println("您输入的excel格式不正确");

}

}

}

Java 可以通过使用 JExcelAPI 或 Apache POIExcel 处理类库来读取 xslm 文件中的数据和宏。其中 JExcelAPI 是一款开源的 Java Excel 处理器,可用于读取 xlsxxlsm、xlsb 等 Excel 文件。而 Apache POI 则是 Apache 软件基金会下的一个跨平台的 Java API,用于读取和写入 Excel DOC、PPT 和 XLS 文件。 对于调用 xslm 中的 vbs 宏,您可以使用 JExcelAPI 的 API 执行宏操作。具体步骤如下: 1. 首先引入 JExcelAPI 的依赖,例如在 Maven 中可以添加如下依赖: ```xml <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency> ``` 2. 读取 xslm 文件: ```java Workbook workbook = Workbook.getWorkbook(new File("excel.xlsm")); ``` 3. 获取宏表单: ```java Sheet macroSheet = workbook.getSheet("VBAProject"); ``` 4. 获取宏的执行代码: ```java String macroCode = macroSheet.getCell(0, 1).getContents(); ``` 5. 执行宏: ```java import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; // 首先需要将 jacob-1.18-x64.dll 这个 jar 包放到 classpath 里面 ActiveXComponent xl = new ActiveXComponent("Excel.Application"); xl.setProperty("Visible", false); Dispatch workbooks = xl.getProperty("Workbooks").toDispatch(); Dispatch workbook = Dispatch.call(workbooks, "Open", "excel.xlsm").toDispatch(); // 执行宏 Dispatch.call(xl, "Run", new Variant("macroName")); // 关闭 Excel Dispatch.call(workbook, "Close", new Variant(false)); Dispatch.call(xl, "Quit"); // 将 COM 对象释放回收 xl.safeRelease(); workbook.safeRelease(); workbooks.safeRelease(); ``` 备注:jacob-1.18-x64.dll 是 jacob-1.18-x86.dll 的 64 位版本,可以自行下载所需的版本。在使用过程中注意修改文件名、文件路径以及宏的名称。同时,也需要在系统中安装有 Excel 软件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值