Java读取指定单元格数据和公式

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文件再进行“另存为”操作,直接改后缀名是不可以的!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Luckysheet是一款基于Web的在线电子表格软件,它的数据都储存在前端浏览器中,因此Java后台不能直接获取单元格参数和公式。但是,通过Luckysheet提供的API,你可以将电子表格数据传递给Java后台,进行计算后再将结果返回给前端。 具体的步骤如下: 1. 在前端页面中,使用Luckysheet提供的`luckysheet.getLuckysheetfile()`方法获取电子表格数据。 ```javascript const sheetData = luckysheet.getLuckysheetfile(); // 获取电子表格数据 ``` 2. 将获取到的数据通过Ajax请求发送给Java后台。 ```javascript $.ajax({ type: 'POST', url: '后台处理数据的URL', data: JSON.stringify(sheetData), contentType: 'application/json;charset=utf-8', success: function(result) { // 处理返回的结果 } }); ``` 3. 在Java后台中,使用JSON库解析请求数据,并根据需要进行计算。 ```java @RequestMapping(value = "/处理数据的URL", method = RequestMethod.POST) public void handleSheetData(@RequestBody String sheetData) { JSONArray sheetArray = JSON.parseArray(sheetData); // 解析请求数据 // 根据需要进行计算 // ... // 将结果返回给前端 } ``` 4. 在Java后台中,将计算结果通过Ajax响应返回给前端。 ```java @RequestMapping(value = "/处理数据的URL", method = RequestMethod.POST) public @ResponseBody String handleSheetData(@RequestBody String sheetData) { JSONArray sheetArray = JSON.parseArray(sheetData); // 解析请求数据 // 根据需要进行计算 // ... // 将结果返回给前端 return result.toString(); } ``` 5. 在前端页面中,将计算结果填充到对应的单元格中。 ```javascript success: function(result) { const resultData = JSON.parse(result); // 解析返回的结果 // 将计算结果填充到对应的单元格中 for (let i = 0; i < resultData.length; i++) { const cell = resultData[i]; luckysheet.setCellValue(cell.row, cell.column, cell.value); } } ``` 其中,`setCellValue()`方法可以将计算结果填充到指定单元格中。需要注意的是,因为Luckysheet是一款基于Web的在线电子表格软件,因此它的数据是异步加载的,因此在获取单元格参数和填充计算结果时,需要使用Luckysheet提供的API来进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值