Java读取单元格公式数据
package com.excel.test;
import java.io.*;
import com.spire.xls.*;
import jxl.Cell;
import jxl.Sheet;
/**
* @author Administrator
* @date 2022年6月6日
*/
public class ReadFormulas {
/*
* 读取excel文件中含有公式的单元格
*/
public static void main(String[] args) {
// /JavaPojo/日通报-地市.xls
File file = new File("日通报.xls");
try {
System.out.println("正在读取地名...");
readColumn(file, 2);// 读取第一列
System.out.println("读取完毕");
} catch (Exception e) {
e.printStackTrace();
}
// 创建Workbook对象
Workbook workbook = new Workbook();
workbook.loadFromFile("日通报.xlsx");
// 获取第一个工作表
Worksheet sheet = workbook.getWorksheets().get(0);
// 遍历C5到I19的单元格
for (Object cell : sheet.getCellRange("C5:I19")) {
CellRange cellRange = (CellRange) cell;
// 判断单元格是否含有公式
if (cellRange.hasFormula()) {
// 打印单元格及公式,返回单元格的坐标信息
String certainCell = String.format("单元格[%d, %d]含有公式:", cellRange.getRow(), cellRange.getColumn());
System.out.println(certainCell + cellRange.getFormula());
}
}
}
/**
*
* @Title: readColumn
* @Description: 读取某一列数据方法
* @Author Administrator
* @DateTime 2022年6月6日 下午3:00:24
* @param file
* @param index(索引从0开始)
* @throws Exception
*/
public static void readColumn(File file, int index) throws Exception {
InputStream inputStream = new FileInputStream(file.getAbsoluteFile());
// Workbook workbook = Workbook.getWorkbooks(inputStream);
jxl.Workbook wb = jxl.Workbook.getWorkbook(inputStream);
// Sheet sheet = workbook.getSheet(0);
Sheet sheet = wb.getSheet(0);
int rows = sheet.getRows();
int columns = sheet.getColumns();
for (int i = 1; i < rows; i++) {
Cell cell = sheet.getCell(index, i);
System.out.println(cell.getContents());
}
}
}
bug分析:
如果在执行过程中出现上图的错误提示,那就是文件后缀格式的问题,因为jxl的jar包只支持Excel 95-2000 工作簿(.xls),不支持Excel 工作簿(.xlsx)。解决办法是把文件另存为xls的格式,注意一定要打开Excel文件再进行“另存为”操作,直接改后缀名是不可以的!