javascript - Google App Script - 在 2 个电子表格之间导入所有范围格式
问题描述
更新:我写了 for 循环来修复合并的单元格和列宽问题。只是需要一些边界方面的帮助!
我正在将一系列单元格从一个 Google 电子表格复制到另一个 Google 电子表格。困难的部分是我试图保持所有格式。到目前为止,我已经能够保留所有格式,除了 3 项:单元格边框、各种合并的单元格和列宽。任何帮助将不胜感激。提前抱歉,昨天才发现Google App Script,我以前从未使用过JS。
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);
}
}
解决方案
这个解决方法怎么样?在此解决方法中,使用了 Class Sheet 的 copyTo() 和 Class Range 的 copyTo()。我认为您的情况有几个答案。因此,请将此视为其中之一。
该脚本的流程如下。
- 使用 Class Sheet 的 copyTo() 复制包含要作为模板复制的范围的工作表。
- 使用 Class Range 的 copyTo() 将值、公式、格式和合并从复制的工作表复制到目标工作表。
- 此时,使用您要复制的范围。
- 使用 Class Range 的 copyTo() 将列宽从复制的工作表复制到目标工作表。
- 删除模板表。
示例脚本:
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
.
参考 :
如果我误解了你的问题,请告诉我。我想修改它。
推荐阅读
- ssh - ssh 今天不会使用公钥登录(!) - 调试会给出奇怪的输出
- python - 将 robots.txt 中的多个用户代理与 Scrapy 匹配
- php - 如何在包含 include('xyz.php') 的目录中包含 php 文件;从另一个目录?
- eclipse - Eclipse Text Editor 背景颜色似乎被当前主题覆盖
- bash - 如何使用 Apple Script 关闭终端窗口
- python - 我可以按下混淆矩阵中的一个单元格从而打开一个文件吗?
- flutter - 如何从异步函数中使用 Future?
- scala - 在 spark 数据框字符串列中查找字符串值的最大长度?
- python - Pandas - 到 Dataframe 的字典系列 - 数组大小太大
- sql-server - 将 SSIS 包从一个 azure 数据库复制到另一个 azure 数据库