Excel的导入和导出

操作excel的依赖的poi包:
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>3.14</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>3.14</version>
</dependency>
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml-schemas</artifactId>
	<version>3.14</version>
</dependency>

导入文件的控制层:

/**
 * @Description: 导入excel数据
 * @author lcy
 * @param file excel文件
 * @return 执行结果
 */
@PostMapping(value = "/excel/import")
public String importExcel(@RequestParam("file") MultipartFile file) {
	return service.importExcel(file);
}

    这里使用了MultipartFile接口来接收文件。该相关会在另一篇博客中记录。

读取Excel的服务层:

public String importExcel(MultipartFile file) {
	// 获取文件名
	String originalFilename = file.getOriginalFilename();
	Workbook workbook = null;
	try {
		if (originalFilename.endsWith(".xls")) {
			workbook = new HSSFWorkbook(file.getInputStream());
		} else if (originalFilename.endsWith(".xlsx")) {
			workbook = new XSSFWorkbook(file.getInputStream());
		}
	} catch (Exception e) {
		log.info("格式错误,获取的文件名为:{}", originalFilename);
		e.printStackTrace();
		return "格式错误";
	}
	try {
		// 获取所有的工作表的的数量
		int numOfSheet = workbook.getNumberOfSheets();
		// 遍历这个这些表
		for (int i = 0; i < numOfSheet; i++) {
			// 获取一个sheet也就是一个工作簿
			Sheet sheet = workbook.getSheetAt(i);
			int lastRowNum = sheet.getLastRowNum();
			// 从第一行开始第一行是标题
			for (int j = 1; j <= lastRowNum; j++) {
				Row row = sheet.getRow(j);
				if (row == null) {
					break;
				}
				/** 接下来就可以在这部分操作每列的字段 **/
				Cell call0 = row.getCell(0); // 获取该行第int列
				/** Call有很多获取内容的方法,根据实际情况进行选择 **/
			}
		}
	} catch (Exception e) {
		log.info("解析错误,当前已解析{}条数据", secuweakList.size());
		e.printStackTrace();
		return "解析错误";
	}
	/** 上面是操作excel获取内容,放入对应的VO类中,存入数据库或进行其他操作即可 **/
}

    主要是要通过文件名称的后缀来区分是2003版以前的Excel还是2007版以后的,不同的版本使用的对象工具去操作。

2003版以前的是拓展名是.xls,使用HSSFWorkbook

2007版以后的拓展名是.xlsx,使用XSSFWorkbook


导出文件控的制层:

/**
 * @Title: exportExcel
 * @Description: 导出excel数据
 * @author lcy
 * @param ...
 */
@GetMapping(value = "/excel/export")
public void exportExcel(HttpServletRequest request, HttpServletResponse response,
	...) {
	/** 这里可以获取要导出的数据集合 **/
	try {
		HSSFWorkbook hssfwb = homePageService.createExcel(List);// 创建Excel对象
		if (hssfwb != null) {
			response.setCharacterEncoding("UTF-8");
			response.setContentType("application/wnd.ms-excel");
			response.setHeader("Content-Disposition",
					"attachment;filename=" + new String("安全加固数据".getBytes("gb2312"), "ISO8859-1") + ".xls");
			ServletOutputStream outputStream = response.getOutputStream();
			hssfwb.write(outputStream);
			outputStream.flush();
			outputStream.close();
			hssfwb = null;
		}
	} catch (Exception e) {
		log.info("导出安全加固数据的excel异常");
		e.printStackTrace();
	}
}

创建Excel的服务层:

public HSSFWorkbook createSecuweakExcel(List<ObjectVO> list) {
	// 创建工作簿
	HSSFWorkbook workbook = new HSSFWorkbook();
	HSSFSheet sheet = workbook.createSheet("安全加固");
	// 生成标题行
	HSSFRow row = sheet.createRow(0);
	HSSFCell cell0 = row.createCell(0);
	HSSFCell cell1 = row.createCell(1);
	...	
	cell0.setCellValue("科室");
	cell1.setCellValue("系统名称");
	cell2.setCellValue("漏洞名称");
	...
	// 循环生成数据行
	for (int i = 0; i < list.size(); i++) {
		row = sheet.createRow(i + 1);// 生成数据行
		cell0 = row.createCell(0);
		cell1 = row.createCell(1);
		cell2 = row.createCell(2);
		...
		ObjectVO vo= list.get(i); // 自定义的VO对象

		cell0.setCellValue(secuweak.getOffice());
		cell1.setCellValue(secuweak.getSystemName());
		cell2.setCellValue(secuweak.getBugName());
		...
		}

	return workbook;
}

### Univer 实现 Excel 文件的导入导出功能 Univer 是一款基于 Web 的电子表格引擎,支持多种数据处理场景,包括 Excel 文件的导入导出。以下是关于如何使用 Univer 实现这些功能的具体说明。 #### 1. 安装必要的依赖项 为了实现 Excel 文件的导入导出功能,需要安装 `univer` 及其相关模块: ```bash npm install @univerjs/core @univerjs/sheets @universheet/excel-io ``` 上述命令会安装核心库以及与 Excel IO 相关的功能模块[^1]。 --- #### 2. 初始化 Univer 应用实例 创建一个基础的应用程序实例来加载管理电子表格数据: ```javascript // 导入必要模块 import { Universe } from '@univerjs/core'; import { SheetsPlugin } from '@univerjs/sheets'; // 创建 Universe 实例并注册插件 const universe = new Universe(); universe.registerPlugin(SheetsPlugin); ``` 通过这段代码初始化了一个基本的 Univer 环境,并启用了电子表格插件以支持后续的数据操作[^2]。 --- #### 3. 配置 Excel IO 插件 为了让应用程序能够读取写入 Excel 文件,需进一步配置 Excel IO 插件: ```javascript import { ExcelIOPlugin } from '@universheet/excel-io'; // 注册 Excel IO 插件 universe.registerPlugin(ExcelIOPlugin); // 获取当前工作簿对象 const workbookContext = universe.getWorkBookContext('defaultWorkbook'); if (!workbookContext) { throw new Error('无法获取默认的工作簿上下文'); } ``` 此部分代码完成了对 Excel IO 功能的支持,并准备好了用于存储数据的工作簿环境[^3]。 --- #### 4. 导入 Excel 数据 利用 Univer 提供的方法可以从本地文件或其他来源加载 Excel 数据到内存中: ```typescript async function importExcel(file: File): Promise<void> { const excelIoService = workbookContext.getCellMatrixController().getExcelIOService(); try { await excelIoService.importFromFile(file, (progress) => console.log(`Import progress: ${progress}%`)); console.log('Excel 文件成功导入'); } catch (error) { console.error('导入失败:', error); } } // 调用函数时传递用户上传的文件对象 ``` 该方法接收一个标准的 HTML5 `File` 对象作为参数,并将其解析为内部可使用的结构化数据形式[^4]。 --- #### 5. 导出 Excel 数据 当完成编辑或生成新的报表后,可以通过以下方式将数据保存回 Excel 文件: ```typescript function exportExcel(): void { const excelIoService = workbookContext.getCellMatrixController().getExcelIOService(); try { const blob = excelIoService.exportToFile({ fileName: 'output.xlsx', fileType: 'xlsx' }); saveAs(blob as Blob, 'output.xlsx'); // 使用 FileSaver.js 进行下载 console.log('Excel 文件成功导出'); } catch (error) { console.error('导出失败:', error); } } ``` 这里调用了 `exportToFile` 方法生成目标文件流,并借助第三方库(如 FileSaver.js)触发浏览器下载行为[^5]。 --- #### 6. 扩展功能 如果项目中有更复杂的需求,比如嵌入图片、自定义单元格样式等,则可以参考其他成熟的解决方案进行集成。例如,在 Vue 或 React 中结合 XLSX ExcelJS 工具包可能是一个不错的选择[^6]。 --- ### 总结 以上展示了如何基于 Univer 构建一套完整的 Excel 文件导入/导出机制。它不仅提供了灵活的操作接口,还允许开发者轻松扩展更多高级特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值