概述:
本文采用exceljs,方法来源于鸿蒙的第三方库,教程地址:https://ohpm.openharmony.cn/#/cn/detail/@archermind%2Fexceljs
因Excel读取简单,所以没有描述读取操作。
软硬件平台:
运行测试平台:鸿蒙6.0.0(Mate 70 Pro模拟器),即API20
开发平台Dev Echo:版本6.0.0.858
因鸿蒙设计不同版本API函数不能完全向下兼容,本文仅适用于API20,对于其他版本可能会出错
配置环境:
需要nodejs环境,我找的最新版,地址:https://nodejs.org/dist/v24.11.1/node-v24.11.1-x64.msi
按照默认安装好nodejs,然后配置好环境变量,使node.exe和ohpm.bat能直接在命令行访问到
我按照默认安装的,在Path中添加了下面的两个环境变量:
C:\Program Files\nodejs
C:\Program Files\Huawei\DevEco Studio\tools\ohpm\bin
安装包:
因导入相关包报错:import ExcelJS, { Cell, Column } from '@archermind/exceljs'
根据教程,在命令行执行如下命令:
ohpm install @archermind/exceljs
功能代码:
需要打开文件读写权限,此功能这里不描述了。关键地方加了注释,我相信应该很容易看懂
typescript
import ExcelJS, { Cell, Column } from '@archermind/exceljs'
export default class ExcelOp {
public static SaveExcel(strFileName: string, titles:string[], datas:string[][]) {
const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet('test');
let indexRow:number = 0;
let indexColumn:number = 0;
let cell:Cell;
/* 标题风格 */
const styleHead:Partial<ExcelJS.Style> = {
border: {
top: { style: 'thin', color: { argb: 'FFD3D3D3' } },
left: { style: 'thin', color: { argb: 'FFD3D3D3' } },
bottom: { style: 'thin', color: { argb: 'FFD3D3D3' } },
right: { style: 'thin', color: { argb: 'FFD3D3D3' } }
},
fill : {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'FFAEEEEE' }
},
font : {
name: '楷体',
family: 2,
size: 12,
bold: true,
italic: true,
color: { argb: 'FF2F4F4F' }
},
alignment: {
vertical: 'middle',
horizontal: 'left'
},
};
/* 奇数列风格 */
const styleOddColumn :Partial<ExcelJS.Style> = {
fill : {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'FFADFF2F' }
},
};
/* 偶数列风格 */
const styleEvenColumn :Partial<ExcelJS.Style> = {
fill : {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'FFADD8E6' }
},
};
/* 设置列宽度,运行没问题,暂时屏蔽
worksheet.columns = [
{ width: 16 },
{ width: 16 },
{ width: 16 },
];*/
indexRow = 0;
/* 设置标题文本和风格 */
for (indexColumn = 0; indexColumn < titles.length; indexColumn++) {
cell = worksheet.getCell(String.fromCharCode(65 + indexColumn) + (indexRow + 1).toString());
cell.value = titles[indexColumn];
cell.style = styleHead;
}
/* 设置类容文本和风格 */
for (indexRow = 0; indexRow < datas.length; indexRow++) {
for (indexColumn = 0; indexColumn < datas[indexRow].length; indexColumn++) {
cell = worksheet.getCell(String.fromCharCode(65 + indexColumn) + (indexRow + 2).toString());
cell.style = ((indexColumn % 2) == 0) ? styleOddColumn : styleEvenColumn;
cell.value = datas[indexRow][indexColumn];
}
}
/* 写入到Excel文件 */
workbook.xlsx.writeFile(strFileName);
}
}
测试代码:
typescript
ExcelOp.SaveExcel('/storage/Users/currentUser/Documents/test.xlsx',
['t1', 't2', 't3'], [['10', '11', '12'], ['20', '21', '22'], ['30', '31', '32']]);
测试结果:
生成了excel文件
