前阵子在和朋友讨论,记账类的app已经那么普遍了,如果想要做点不一样的还能加什么功能。从我自己的角度出发,我觉得完全可以加一个导出Excel嘛。但是目前原生鸿蒙并没有导出Excel的方法,常规的做法是通过服务器端生成Excel文件后,再下载到本地……服务器端的方案肯定是不成的,因为大家都知道,记账属于独立开发三件套止一,独立开发意味着……哪里来的钱租服务器啊。
所以,我们还是自己做一个Excel导出的三方库吧
首先要思考一下原理:excel并不像html网页或者txt文件一样,可以通过直接编辑内容指定一个文件格式来生成文件,如果我们对一个excel文件右键通过记事本打开的话,你会发现一堆乱码,不过这个思路还是可以用的,比如说csv格式的数据然后保存成xls格式,但是csv只能上数据不能做样式,还好,还有一个xml可以用,因为从Excel 2003开始,就引入了xml格式,而且还可以支持样式。
接下来思路就简单了,大致来说就是:定义一个数据格式,要包含文件名、每行每列的内容还可以加入样式,然后根据xml的文件格式去生成一个完整的文件内容,最后通过@ohos.file.fs (文件管理)接口,来创建一个文件,写入内容,再保存。保存到本地用的是@ohos.file.picker (选择器)中的DocumentViewPicker,即让用户选择一个文件保存的地址。
已经上传到了OpenHarmony的三方库中,具体使用办法如下:
安装使用
基础安装
ohpm install excel_hm
导入库文件
import {
ExcelGenerator,
ExcelTableData,
ExcelCellData,
ExcelGenerateOptions,
ExcelGenerateResult
} from 'excel_hm';
创建生成器实例
const context = getContext(this) as common.UIAbilityContext;
const excelGenerator = new ExcelGenerator(context);
数据格式规范
ExcelTableData 接口
interface ExcelTableData {
title: string; // 表格标题(必填)
headers?: string[]; // 表头数组(可选)
data: ExcelCellData[][]; // 二维数据数组(必填)
titleStyle?: ExcelCellStyle; // 标题样式(可选)
headerStyle?: ExcelCellStyle; // 表头样式(可选)
dataStyle?: ExcelCellStyle; // 数据样式(可选)
}
ExcelCellData 接口
interface ExcelCellData {
value: string; // 单元格内容(必填)
style?: ExcelCellStyle; // 单元格样式(可选)
}
ExcelCellStyle 接口
interface ExcelCellStyle {
fontWeight?: 'normal' | 'bold'; // 字体粗细
fontSize?: number; // 字体大小
fontColor?: string; // 字体颜色
backgroundColor?: string; // 背景颜色
alignment?: 'left' | 'center' | 'right'; // 对齐方式
}
基础用法
// 1. 创建简单表格数据
const tableData = ExcelGenerator.createSimpleTableData(
'员工信息表',
['姓名', '年龄', '部门'],
[
['张三', '25', '技术部'],
['李四', '30', '销售部'],
['王五', '28', '人事部']
]
);
// 2. 生成Excel文件
const result = await excelGenerator.generateExcel(tableData);
if (result.success) {
console.log('生成成功:'+ result.message);
// 3. 保存到本地
const saveResult = await excelGenerator.saveToLocal(result.filePath!, result.fileName!);
console.log('保存结果:'+ saveResult.message);
} else {
console.error('生成失败:'+ result.message);
}