use*_*814 6 google-sheets google-apps-script
我需要将Google SpreadSheet上的工作表复制到另一个SpreadSheet文档.
我已经完成了我的研究,我找到了两种方法来做到这一点,但是两者都存在我不知道如何修复的问题.
第一种方法使用格式复制工作表,但它保留了引用的单元格,因此我在新文档(#ref)中得到引用错误.我需要一个复制格式和值(不是引用)的函数.
function copySheet() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var sheet = source.getSheets()[0];
var destination = SpreadsheetApp.openById("15ucPbZrIYXZAOCYVdpK6OA0oyQT1NcsmuiJmDRfdpHQ");
sheet.copyTo(destination);
}
Run Code Online (Sandbox Code Playgroud)
第二种方法复制没有引用的值,但它只复制值,没有格式.
function copySheetValues()
{
var source = SpreadsheetApp.getActiveSheet();
var sourcename = source.getSheetName();
var sourceDataRange = source.getDataRange();
var sourceSheetValues = sourceDataRange.getValues();
var sourceRows = sourceDataRange.getNumRows();
var sourceColumns = sourceDataRange.getNumColumns();
var destination = SpreadsheetApp.openById('15ucPbZrIYXZAOCYVdpK6OA0oyQT1NcsmuiJmDRfdpHQ');
destination.insertSheet(sourcename, 0);
destination.getDataRange().offset(0, 0, sourceRows, sourceColumns).setValues(sourceSheetValues);
}
Run Code Online (Sandbox Code Playgroud)
如何编写保留格式并复制值的函数?
Ser*_*sas 12
由于您似乎知道如何使用整个数据范围获取和设置值,因此只需使用其他方法来获取和设置所有其他参数.
在这种情况下,脚本编辑器自动完成是一个很好的帮助,尽量不要忘记一个!
我希望列表完整,尽管写起来有点痛苦!
下面的代码,如果其中一个对你没用,只需将其删除(在两个方向(设置和获取)).
function copySheetValues(){
var source = SpreadsheetApp.getActiveSheet();
var sourcename = source.getSheetName();
var sValues = source.getDataRange().getValues();
var sBG = source.getDataRange().getBackgrounds();
var sFC = source.getDataRange().getFontColors();
var sFF = source.getDataRange().getFontFamilies();
var sFL = source.getDataRange().getFontLines();
var sFFa = source.getDataRange().getFontFamilies();
var sFSz = source.getDataRange().getFontSizes();
var sFSt = source.getDataRange().getFontStyles();
var sFW = source.getDataRange().getFontWeights();
var sHA = source.getDataRange().getHorizontalAlignments();
var sVA = source.getDataRange().getVerticalAlignments();
var sNF = source.getDataRange().getNumberFormats();
var sWR = source.getDataRange().getWraps();
var destination = SpreadsheetApp.openById('15ucPbZrIYXZAOCYVdpK6OA0oyQT1NcsmuiJmDRfdpHQ');
var destinationSheet = destination.insertSheet(sourcename, 0);
destinationSheet.getRange(1,1,sValues.length,sValues[0].length).setValues(sValues)
.setBackgrounds(sBG)
.setFontColors(sFC)
.setFontFamilies(sFF)
.setFontLines(sFL)
.setFontFamilies(sFFa)
.setFontSizes(sFSz)
.setFontStyles(sFSt)
.setFontWeights(sFW)
.setHorizontalAlignments(sHA)
.setVerticalAlignments(sVA)
.setNumberFormats(sNF)
.setWraps(sWR);
}
Run Code Online (Sandbox Code Playgroud)
布莱恩的回答和你的评论使我想到了另一个解决方案,更简单,也处理合并的单元格.这是代码:
function copySheetValuesV2(){
var source = SpreadsheetApp.getActiveSheet();
var sourceName = source.getSheetName();
var sValues = source.getDataRange().getValues();
var destination = SpreadsheetApp.openById('15ucPbZrIYXZAOCYVdpK6OA0oyQT1NcsmuiJmDRfdpHQ');
source.copyTo(destination)
var destinationSheet = destination.getSheetByName('Copy of '+sourceName)
destinationSheet.getRange(1,1,sValues.length,sValues[0].length).setValues(sValues);// overwrite all formulas that the copyTo preserved
}
Run Code Online (Sandbox Code Playgroud)
在这两个脚本是确保目标表名称不存在.我没有处理这种情况,尽管使用try/catch结构很容易.
| 归档时间: |
|
| 查看次数: |
12581 次 |
| 最近记录: |