Office Script开发:按规则格式化Raw_Data并导出为CSV
Office Script实现指定Excel数据映射及CSV导出
以下是满足需求的完整Office Script实现脚本,包含数据处理逻辑与CSV导出功能:
function main(workbook: ExcelScript.Workbook) { // 获取目标工作表 const rawDataSheet = workbook.getWorksheet("Raw_Data"); const tempSheet = workbook.getWorksheet("Temp"); if (!rawDataSheet || !tempSheet) { throw new Error("未找到Raw_Data或Temp工作表"); } // 清空Temp表原有数据(按需保留) tempSheet.getUsedRange()?.clear(ExcelScript.ClearApplyTo.all); // 1. A9值为1时,复制F9-J9到Temp表A1-E1 if (rawDataSheet.getRange("A9").getValue() === 1) { rawDataSheet.getRange("F9:J9").copyTo(tempSheet.getRange("A1:E1"), ExcelScript.RangeCopyType.all); } // 2. A10值为2时,复制E10、I10到Temp表F1、G1 if (rawDataSheet.getRange("A10").getValue() === 2) { rawDataSheet.getRange("E10").copyTo(tempSheet.getRange("F1"), ExcelScript.RangeCopyType.all); rawDataSheet.getRange("I10").copyTo(tempSheet.getRange("G1"), ExcelScript.RangeCopyType.all); } // 3. A11值为2时,复制F9-J9到A2-E2,同时复制E11、I11到F2、G2 if (rawDataSheet.getRange("A11").getValue() === 2) { rawDataSheet.getRange("F9:J9").copyTo(tempSheet.getRange("A2:E2"), ExcelScript.RangeCopyType.all); rawDataSheet.getRange("E11").copyTo(tempSheet.getRange("F2"), ExcelScript.RangeCopyType.all); rawDataSheet.getRange("I11").copyTo(tempSheet.getRange("G2"), ExcelScript.RangeCopyType.all); } // 4. A12值为2时,复制F9-J9到A3-E3,同时复制E12、I12到F3、G3 if (rawDataSheet.getRange("A12").getValue() === 2) { rawDataSheet.getRange("F9:J9").copyTo(tempSheet.getRange("A3:E3"), ExcelScript.RangeCopyType.all); rawDataSheet.getRange("E12").copyTo(tempSheet.getRange("F3"), ExcelScript.RangeCopyType.all); rawDataSheet.getRange("I12").copyTo(tempSheet.getRange("G3"), ExcelScript.RangeCopyType.all); } // 5. A13值为1时,复制F13-J13到A4-E4 if (rawDataSheet.getRange("A13").getValue() === 1) { rawDataSheet.getRange("F13:J13").copyTo(tempSheet.getRange("A4:E4"), ExcelScript.RangeCopyType.all); } // 6. A14值为2时,复制E14、I14到F4、G4 if (rawDataSheet.getRange("A14").getValue() === 2) { rawDataSheet.getRange("E14").copyTo(tempSheet.getRange("F4"), ExcelScript.RangeCopyType.all); rawDataSheet.getRange("I14").copyTo(tempSheet.getRange("G4"), ExcelScript.RangeCopyType.all); } // 7. A15值为2时,复制F15-J15到A5-E5,同时复制E15、I15到F5、G5 if (rawDataSheet.getRange("A15").getValue() === 2) { rawDataSheet.getRange("F15:J15").copyTo(tempSheet.getRange("A5:E5"), ExcelScript.RangeCopyType.all); rawDataSheet.getRange("E15").copyTo(tempSheet.getRange("F5"), ExcelScript.RangeCopyType.all); rawDataSheet.getRange("I15").copyTo(tempSheet.getRange("G5"), ExcelScript.RangeCopyType.all); } // 导出Temp表为CSV exportTempSheetToCSV(workbook, tempSheet); } // 辅助函数:生成并下载CSV文件 function exportTempSheetToCSV(workbook: ExcelScript.Workbook, sheet: ExcelScript.Worksheet) { const usedRange = sheet.getUsedRange(); if (!usedRange) { console.log("Temp表无数据可导出"); return; } const values = usedRange.getValues(); let csvContent = ""; // 处理单元格内容,兼容含逗号、引号的场景 values.forEach(row => { const formattedRow = row.map(cell => { if (typeof cell === "string" && (cell.includes(",") || cell.includes('"'))) { return `"${cell.replace(/"/g, '""')}"`; } return cell.toString(); }); csvContent += formattedRow.join(",") + "\r\n"; }); // 触发文件下载 workbook.getApplication().sendFile({ data: csvContent, fileName: "Temp_Export.csv", fileFormat: ExcelScript.FileFormat.csv }); }
关键细节说明
- 工作表校验:先确认
Raw_Data和Temp表存在,避免后续操作报错。 - 复制规则:使用
copyTo方法时,ExcelScript.RangeCopyType.all会复制值、格式等全部内容,若仅需复制值,可改为ExcelScript.RangeCopyType.values。 - CSV兼容性:辅助函数会自动处理含逗号、引号的单元格,添加双引号包裹并转义内部引号,符合CSV标准格式。
- 可选操作:若不需要清空
Temp表原有数据,可删除tempSheet.getUsedRange()?.clear(ExcelScript.ClearApplyTo.all);代码行。
内容的提问来源于stack exchange,提问作者Jampong
相关产品推荐
相关产品推荐

