首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google导入2 SpreadSheets之间的所有范围格式

Google导入2 SpreadSheets之间的所有范围格式
EN

Stack Overflow用户
提问于 2018-08-16 21:15:54
回答 1查看 1.6K关注 0票数 2

更新:我编写了for循环来修复合并的单元格和列宽度问题。只是在边境问题上需要一些帮助!

我正在将一系列的单元格从一个Google电子表格复制到另一个Google电子表格。最困难的是,我试图保持所有的格式。到目前为止,我已经能够保存所有的格式,除了3项:单元格边框、各种合并单元格和列宽度。任何帮助都将不胜感激。抱歉,昨天刚刚发现了,我以前从未使用过JS。

代码语言:javascript
运行
复制
function importTable() {

  // Source spreadsheet
  var srcSpreadSheet = SpreadsheetApp.openById("SpreadSheet-ID");
  var scrSheet = srcSpreadSheet.setActiveSheet(srcSpreadSheet.getSheetByName("Sheet1"));

  // Destination spreadsheet
  var destSpreadSheet = SpreadsheetApp.openById("SpreadSheet-ID");
  var destSheet = destSpreadSheet.setActiveSheet(destSpreadSheet.getSheetByName("Test"));
  destSheet.clear();

  // Get data and formatting from the source sheet
  var range = scrSheet.getRange(1, 2, 24, 16);

  var values = range.getValues();
  var background = range.getBackgrounds();
  var banding = range.getBandings();
  var mergedRanges = range.getMergedRanges();
  var fontColor = range.getFontColors();
  var fontFamily = range.getFontFamilies();
  var fontLine = range.getFontLines();
  var fontSize = range.getFontSizes();
  var fontStyle = range.getFontStyles();
  var fontWeight = range.getFontWeights();
  var horAlign = range.getHorizontalAlignments();
  var textStyle = range.getTextStyles();
  var vertAlign = range.getVerticalAlignments();

  // Put data and formatting in the destination sheet
  var destRange = destSheet.getRange(1, 2, 24, 16);

  destRange.setValues(values);
  destRange.setBackgrounds(background);
  destRange.setFontColors(fontColor);
  destRange.setFontFamilies(fontFamily);
  destRange.setFontLines(fontLine);
  destRange.setFontSizes(fontSize);
  destRange.setFontStyles(fontStyle);
  destRange.setFontWeights(fontWeight);
  destRange.setHorizontalAlignments(horAlign);
  destRange.setTextStyles(textStyle);
  destRange.setVerticalAlignments(vertAlign);

    // Iterate through to put merged ranges in place
  for (var i = 0; i < mergedRanges.length; i++) {
    destSheet.getRange(mergedRanges[i].getA1Notation()).merge();
  }

  // Iterate through to get the column width of the source destination
  for (var i = 1; i < 18; i++) {
    var width = scrSheet.getColumnWidth(i);
    destSheet.setColumnWidth(i, width);
  }

  // Iterate through to get the row heighth of the source destination
  for (var i = 1; i < 27; i++){
    var height = scrSheet.getRowHeight(i);
    destSheet.setRowHeight(i, height);
  }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-17 02:57:17

这个解决办法怎么样?在这个解决方案中,使用了类表的copyTo()和类范围的copyTo()。我认为你的处境有几个答案。所以请把这当成他们中的一员。

此脚本的流程如下所示。

  1. 使用类工作表的copyTo()复制工作表,包括要将其作为模板复制的范围。
  2. 使用类范围的copyTo()将值、公式、格式和合并从复制的工作表复制到目标工作表。
    • 此时,将使用要复制的范围。

  1. 使用类范围的copyTo()将列宽度从复制的工作表复制到目标工作表。
  2. 删除模板表。

示例脚本:

代码语言:javascript
运行
复制
function importTable2() {
  // Source
  var sourceSheet = SpreadsheetApp.openById("SpreadSheet-ID").getSheetByName("Sheet1");
  var sourceRange = sourceSheet.getRange(1, 2, 24, 16);

  // Destination
  var destSS = SpreadsheetApp.openById("SpreadSheet-ID");
  var destSheet = destSS.getSheetByName("Test");
  var destRange = destSheet.getRange(1, 2, 24, 16);
  destSheet.clear();

  // Copy
  var copiedsheet = sourceRange.getSheet().copyTo(destSS);
  copiedsheet.getRange(sourceRange.getA1Notation()).copyTo(destRange);
  copiedsheet.getRange(sourceRange.getA1Notation()).copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_COLUMN_WIDTHS, false);
  destSS.deleteSheet(copiedsheet);
}

注意:

  • 在运行此脚本之前,请设置SpreadSheet-ID

参考资料:

如果我误解了你的问题,请告诉我。我想修改一下。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51885452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档