google-apps-script - 复制行并附加它,保持谷歌脚本中的文本格式
问题描述
我有一个包含零件和序列号列表的谷歌表。然后我有一个脚本,它获取该列表并创建一个新表,如果第一张表中有多个序列号,则将每个部件号/序列号分成自己的行。第一张表项目 # Desc 类型序列号 231231 棒球运动 12322、421321、00000321321
第二张 231231 棒球运动 12322 231231 棒球运动 421321 231231 棒球运动 321321
我的问题是当我复制最后一个单元格时,有时数字有前导 0,但有时它们不是文本。一切正常,只是它删除了前导 0
下面是我正在使用的代码。我已经尝试了一些事情,但我无法从 d 列复制确切的文本。它总是想删除 0 并添加一组指定的 0 将不起作用,因为并非所有东西都具有相同的数量,有些可以,有些则不。
//@@@@@@@@@@@@@@@@@@@@@@@ Print Avery Labels @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
function createAveryLabelsSheet() {
Logger.clear()
// source spreadsheets
var sourceSpreadSheet = SpreadsheetApp.getActive();
var ss = sourceSpreadSheet.getSheetByName('On Hands Stock');
//destination spreadsheet
var destinationSpreadSheet = sourceSpreadSheet.getSheetByName('Avery Labels');
// destinationSpreadSheet.appendRow(['Item #','Description','Type','Serial #','Print']);
var startRow=2; // First row of data to process
var numRows = 350; // Number of rows to process
var startColumn = 1; // A=1 B=2
var numColumns = 9; // Number of columns to process
// destinationSpreadSheet.setRowHeights(2, 300, 100);
var dataRange = ss.getRange(startRow, startColumn, numRows, numColumns);
var data = dataRange.getValues();
for (var i = 1; i < data.length; ++i) {
var column = data[i];
if(column[0] != ""){
var itemnum = column[0]; // a column
var desc = column[1]; // b column
var type = column[4]; // b column
var serial = column[3]; // b column
var serialnum = serial.split(", ");
var print = 'False';
for (var j = 0; j < serialnum.length; ++j) {
if(serial != ""){
var cell = sourceSpreadSheet.getSheetByName('Avery Labels').getRange('E'+i);
addCheckbox(cell);
// var setcellformat = sourceSpreadSheet.getSheetByName('Avery Labels').getRange('A'+i);
// setcellformat.setFontWeight("bold").setHorizontalAlignment("center").setWrap(false).setFontFamily('Arial').setFontSize('10').setNumberFormat("@");
destinationSpreadSheet.appendRow([itemnum,desc,type,serialnum[j],]);
}else{
var cell = sourceSpreadSheet.getSheetByName('Avery Labels').getRange('E'+i);
addCheckbox(cell);
destinationSpreadSheet.appendRow([itemnum,desc,type,]);
}
}
}
}
formatAverySheets();
}
function addCheckbox(cell) {
var criteria = SpreadsheetApp.DataValidationCriteria.CHECKBOX;
var rule = SpreadsheetApp.newDataValidation().requireCheckbox().build();
cell.setDataValidation(rule);
}
function formatAverySheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Avery Labels');
var end =sheet.getLastRow();
var cell = sheet.getRange('a2:'+end);
//cell.sort(3);
cell.setFontWeight("bold").setHorizontalAlignment("center").setWrap(false).setFontFamily('Arial').setFontSize('10');
var serialcell = sheet.getRange('d2:'+end);
// serialcell.setFontWeight("bold").setHorizontalAlignment("center").setWrap(false).setFontFamily('Arial').setFontSize('10').setNumberFormat('@');
var lastcolumn =sheet.getLastColumn();
sheet.autoResizeColumns(1, lastcolumn);
SpreadsheetApp.flush();
AverySheeFinished();
}
解决方案
我确定它不是最干净的代码,但我发现它现在确实有效。我添加了 getLastRow,然后添加了一段在输入之前格式化为纯文本的代码。
//@@@@@@@@@@@@@@@@@@@@@@@ Print Avery Labels @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
function createAveryLabelsSheet() {
// source spreadsheets
var sourceSpreadSheet = SpreadsheetApp.getActive();
var ss = sourceSpreadSheet.getSheetByName('On Hands Stock');
//destination spreadsheet
var destinationSpreadSheet = sourceSpreadSheet.getSheetByName('Avery Labels');
// destinationSpreadSheet.appendRow(['Item #','Description','Type','Serial #','Print']);
var startRow=2; // First row of data to process
var numRows = 350; // Number of rows to process
var startColumn = 1; // A=1 B=2
var numColumns = 9; // Number of columns to process
// destinationSpreadSheet.setRowHeights(2, 300, 100);
var dataRange = ss.getRange(startRow, startColumn, numRows, numColumns);
var data = dataRange.getValues();
for (var i = 1; i < data.length; ++i) {
var column = data[i];
if(column[0] != ""){
var itemnum = column[0]; // a column
var desc = column[1]; // b column
var type = column[4]; // b column
var serial = column[3]; // b column
var serialnum = serial.split(", ");
var print = 'False';
for (var j = 0; j < serialnum.length; ++j) {
if(serial != ""){
destinationSpreadSheet.appendRow([itemnum,desc,type]);
var lastrow=destinationSpreadSheet.getLastRow();
destinationSpreadSheet.getRange('d'+lastrow).setNumberFormat('@').setValue(serialnum[+j]);
var cell = sourceSpreadSheet.getSheetByName('Avery Labels').getRange('E'+i);
addCheckbox(cell);
}else{
var cell = sourceSpreadSheet.getSheetByName('Avery Labels').getRange('E'+i);
addCheckbox(cell);
destinationSpreadSheet.appendRow([itemnum,desc,type,]);
}
}
}
}
}
推荐阅读
- node.js - JSON响应中数组内容的顺序不一致
- javascript - 在 Atom 或 VS Code 等文本编辑器中使用的基本组件是什么?
- wpf - 为什么在声明文本块样式时不能更改标签的前景?
- ios - 斯威夫特 | UIViewTable 滚动离开屏幕时更改复选标记
- python - 当我运行我的 python 脚本时,它显示一个空白屏幕并迅速消失
- sqlite - sqlite 从具有多个“名称”的单列中选择 DISTINCT?
- flutter - Flutter:我想在运行时将字体应用于整个应用程序文本
- python - 前端到后端无法接收数据
- python - Python Buffer API 图片上传
- android - addOnSuccessListener (Firebase)从未调用,即使 putFile 方法成功上传文件