北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

如何导出Excel文件 -- excel_hm介绍 ##三方SDK##

前阵子在和朋友讨论,记账类的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);
}
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言