将文本分隔到一列中,并将其移动到另一列,Excel 脚本

Separate text in once column and move it to another, Excel Scripts

提问人:Ponoco-nuchi 提问时间:11/9/2023 最后编辑:tallerPonoco-nuchi 更新时间:11/9/2023 访问量:48

问:

我正在尝试在 excel 中编写一个脚本,该脚本将日期和时间值分散在一列中,并将日期放入单独的列中。例如,我在 A1 列中有“2023 年 11 月 4 日上午 11:00”,而理想情况下我需要 A1 中的日期和 B1 中的时间;我需要它来遍历每个使用过的行。我尝试了几种方法,但不断出现错误。我正在使用脚本来尝试自动化此操作。(我已经编写了宏并正在工作,但我用于自动化的软件不接受宏)

我尝试过的一件事

let s = mainSheet.getRange("A2").getValue().toString()
let ss = s.split(" ")
console.log(ss)

控制台返回值为“45231”

JavaScript Excel 办公脚本

评论

0赞 Solar Mike 11/9/2023
因此,将“45231”格式化为日期/时间,因为它是Excel日期/时间代码。

答:

1赞 taller 11/9/2023 #1

选项 1:对列 A 和 B 应用不同的日期时间格式,以便提取日期和时间。

如果选项 1 不符合您的要求,请考虑使用选项 2。

function main(workbook: ExcelScript.Workbook) {
    let selectedSheet = workbook.getActiveWorksheet();
    selectedSheet.getRange("B1").copyFrom(selectedSheet.getRange("A:A"), ExcelScript.RangeCopyType.all, false, false);
    selectedSheet.getRange("A:A").setNumberFormatLocal("m/d/yyyy");
    selectedSheet.getRange("B:B").setNumberFormatLocal("h:mm AM/PM");
}

选项 2:将文本拆分为两部分


function main(workbook: ExcelScript.Workbook) {
    let selectedSheet = workbook.getActiveWorksheet();
    let lastCell = selectedSheet.getRange("A:A").getLastCell().getRangeEdge(ExcelScript.KeyboardDirection.up);
    let dataRange = selectedSheet.getRange("A1:A" + (lastCell.getRowIndex()+1));
    let dataTexts = dataRange.getTexts();
    let resRange = dataRange.getResizedRange(0,1);
    let resTexts = resRange.getTexts();
    for(let i=0; i<dataTexts.length; i++){
      resTexts[i] = splitDateAndTime(dataTexts[i][0])
    }
  resRange.setValues(resTexts);    
  selectedSheet.getRange("A:A").setNumberFormatLocal("m/d/yyyy");
}

function splitDateAndTime(dateTimeString: string): [string, string] {
  const dateTimeRegex = /^(\d{1,2}\/\d{1,2}\/\d{4})\s+(.+)/;
  const match = dateTimeString.match(dateTimeRegex);
  if (match) {
    const datePart = match[1];
    const timePart = match[2];
    return [datePart, timePart];
  }
  return [dateTimeString, ""];
}

如果不需要验证日期时间字符串,可以简化如下。splitDateAndTime

function splitDateAndTime(dateTimeString: string): [string, string] {
  const parts = dateTimeString.split(" ");
  if(parts.length === 3){
    return [parts[0], parts.slice(1,).join(" ")];
  }
  return [dateTimeString, ""];
}

enter image description here