我正在try 编写一个基于映射重写标头的应用程序脚本函数.

下面是我的代码:

function headerMapping() {

  // var values = sheet.getDataRange().getValues();
  // var originalHeaders = values[0];

  var values = [['Campaign Id', 'Source', 'Medium', 'Campaign', 'Date', 'Spend', 'Clicks', 'Impressions'], ['563573', 'bing', 'cpc', 'Search', 'Sun Jun 25 00:00:00 GMT+01:00 2023', '18.97', '7.0', '11.0']];
  var originalHeaders = ['Campaign Id', 'Source', 'Medium', 'Campaign', 'Date', 'Spend', 'Clicks', 'Impressions'];

  var headerMapping = {
    'Campaign Id': 'campaign_id',
    'Source': 'campaign_source',
    'Medium': 'campaign_medium',
    'Campaign': 'campaign_name',
    'Date': 'date_column',
    'Cost': 'cost_column',
    'Clicks': 'clicks_column',
    'Impressions': 'impressions_column'
  };
  
  // Rewrite the headers based on the mapping
  var newHeaders = originalHeaders.map(function(header) {
    return headerMapping[header.toLowerCase()] || header;
  });
  
  // Create the CSV data with the new headers
  var csvData = [newHeaders.join(',')];
  
  for (var i = 1; i < values.length; i++) {
    var row = values[i];
    var formattedRow = [];
    
    for (var j = 0; j < row.length; j++) {
      var value = row[j];
      
      // Format date column as YYYY-MM-DD
      if (originalHeaders[j].toLowerCase() === 'date' && value instanceof Date) {
        value = Utilities.formatDate(value, spreadsheet.getSpreadsheetTimeZone(), 'YYYY-MM-dd');
      }
      
      formattedRow.push(value);
    }
    
    csvData.push(formattedRow.join(','));
  }

  Logger.log(csvData.join('\n'));
}

此代码返回以下标头:

Campaign Id,Source,Medium,Campaign,date_column,Spend,Clicks,Impressions

我希望看到这个标题:

campaign_id,campaign_source,campaign_medium,campaign_name,date_column,cost_column,clicks_column,impressions_column

有什么帮助吗?

推荐答案

return headerMapping[header.toLowerCase()] || header;将仅匹配小写标题.使用

return headerMapping[header] || header;

取而代之的是.

Javascript相关问答推荐

在类型脚本中使用浏览器特定属性的正确方法是什么?

我可以获取所有包含@的超链接,然后在新选项卡中打开它们吗?

CSS背景过滤器忽略转换持续时间(ReactJS)

当没有固定间隔时,是否可以在d3.js中进行画笔捕捉?

如何在react js中显示文本字段或2个不同的组件?

使脚本兼容于其他YouTube URL格式

IOS(React Native)中未找到模块SquareReaderSDK

更改一组用户创建的项目的js排序标准

在JS中获取名字和姓氏的首字母

用相器进行向内碰撞检测

获取加载失败:获取[.]添加时try 将文档添加到Firerestore,Nuxt 3

使用i18next在React中不重新加载翻译动态数据的问题

react—router v6:路由没有路径

在nextjs服务器端api调用中传递认证凭证

Chromium会将URL与JS一起传递到V8吗?

如何从HTML对话框中检索单选项组的值?

为什么123[';toString';].long返回1?

使用getBorbingClientRect()更改绝对元素位置

根据一个条件,如何从处理过的数组中移除一项并将其移动到另一个数组?

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等