TypeScript
// Excel2.ts
import ExcelJS2 from 'exceljs';
import fs from 'fs';
import path from 'path';
export async function writeProposalResultToExcel(
dataList: any[], // 数据数组
templatePath: string,
outputPath: string
): Promise<{ success: boolean; message: string }> {
try {
// 检查模板文件是否存在
if (!fs.existsSync(templatePath)) {
throw new Error(`模板文件不存在: ${templatePath}`);
}
console.log(`模板文件存在,開始複製模板文件...`);
// 複製模板文件到輸出目錄
fs.copyFileSync(templatePath, outputPath);
console.log(`模板文件成功拷贝到: ${outputPath}`);
// 创建一个新的工作簿实例并读取拷贝后的文件
const workbook = new ExcelJS2.Workbook();
await workbook.xlsx.readFile(outputPath);
// 获取第一个工作表
const worksheet = workbook.worksheets[0];
if (!worksheet) {
throw new Error("模板文件中未找到有效的工作表");
}
console.log(`工作表加載成功,開始操作數據...`);
// 複製第1到第35行,包括樣式
for (let rowIndex = 1; rowIndex <= 35; rowIndex++) {
const sourceRow = worksheet.getRow(rowIndex);
const targetRow = worksheet.getRow(rowIndex + 35); // 複製到第36行起
// 複製每一列的數據和樣式
sourceRow.eachCell({ includeEmpty: true }, (cell, colNumber) => {
const targetCell = targetRow.getCell(colNumber);
targetCell.value = cell.value;
// 複製樣式
targetCell.style = cell.style;
});
targetRow.commit(); // 確保行的改動生效
}
console.log(`成功粘贴到第36行及以下`);
// 保存修改后的文件
await workbook.xlsx.writeFile(outputPath);
return { success: true, message: `数据已成功写入文件: ${outputPath}` };
} catch (error) {
console.error("写入 Excel 时发生错误:", error);
return { success: false, message: error instanceof Error ? error.message : "未知错误" };
}
}
export default ExcelJS2;
TypeScript
import DbConnect from './common/DbConnect';
import { User } from "./entity/User";
import logger from './config/log4js-config';
import { User2 } from "./entity/User2";
import { writeProposalResultToExcel } from './common/Excel2';
async function testTransaction() {
await DbConnect.initialize();
async function sqlSelect() {
try {
const result = await DbConnect.findMany(User2);
// console.log('data:', result);
// 在這裏調用 模板地址 E:\templ.xlsx,輸出地址自己選擇,名字也要自己寫
const templatePath = 'E:\\templ.xlsx'; // 替換為實際模板路徑
const outputPath = 'E:\\output\\result.xlsx'; // 替換為實際輸出路徑
const writeResult = await writeProposalResultToExcel(result, templatePath, outputPath);
// 打印結果
if (writeResult.success) {
console.log(writeResult.message);
} else {
console.error('Failed to write Excel:', writeResult.message);
}
} catch (error) {
logger.error("Error executing select: ", error); // エラーログを記録
console.error('Error: ', error);
}
}
sqlSelect()
}
// running
testTransaction().catch((error) => {
console.error('Test failed', error);
});