You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 06:31:15