import quillTable from "quill-table";
// Quill.debug("warn");
// Quill.register("modules/ImageResize", ImageResize);
Quill.register("modules/ImageCompress", ImageCompress);
Quill.register("modules/imageUploader", imageUploader);
Quill.register(quillTable.TableCell);
Quill.register(quillTable.TableRow);
Quill.register(quillTable.Table);
Quill.register(quillTable.Contain);
Quill.register("modules/table", quillTable.TableModule);
// [TableContainer, TableRow, TableCell, 0]
var maxRows = 10;
var maxCols = 5;
var tableOptions = [];
for (var r = 1; r <= maxRows; r++) {
for (var c = 1; c <= maxCols; c++) {
tableOptions.push("newtable_" + r + "_" + c);
}
}
How can we add table to React-Quill text editor using quill-better-table . Can someone provide existing codesandbox for same if availablere or changes need in react-Quill to allow us to add table .
Related
I am creating two lists of links on my opening sheet (9060DASH) in Google Sheets. It looks like this:
One list is links to all sheets that are not hidden (Active) and one to all that are hidden. Each item must meet two other criteria to be included:
The sheet name must not include the numbers "9060."
The cell GH3 in the sheet must contain "Protected."
I have a functioning script, but it is loading too slowly. Here is a sample to show how it loads during onOpen(). How can I do this more efficiently? Can it be done better using "push"? Here is the script:
function populateSheetList() {
SpreadsheetApp.getActive().getSheetByName("9060DASH").activate();
var ss = SpreadsheetApp.getActive();
var ui = SpreadsheetApp.getUi();
ss.getRange('9060DASH!D4:E100').clear();
var counter = 4;
var sheetName = "";
var cellID= "";
var richValue = "";
var sheetURL = ss.getUrl();
var sheetLink = ""
var mySheet = "";
var shouldNotContain = '9060'; //array code from stackover to build array without 9060 sheets
var sheetNames = SpreadsheetApp.getActiveSpreadsheet().getSheets().map(s => s.getName());
var filtered = sheetNames.filter(x => !x.toLowerCase().match(shouldNotContain.toLowerCase()));
/** CREATES ACTIVE SHEETS LIST */
for(var i =0;i<filtered.length;i++){
cellID = '9060DASH!D'+counter;
sheetName = filtered[i];
mySheet = ss.getSheetByName(sheetName);
sheetLink = sheetURL+'#gid='+ mySheet.getSheetId();
if(mySheet.isSheetHidden() == false){
if(ss.getRange(sheetName+"!GH3").getValue() == "Protected"){
richValue = SpreadsheetApp.newRichTextValue()
.setText(sheetName)
.setLinkUrl(sheetLink)
.build();
ss.getRange(cellID).setRichTextValue(richValue);
counter = counter+1;
}
}
}
/** GATHERING HIDDEN SHEETS */
var counter = 4;
for(var i =0;i<filtered.length;i++){
cellID = '9060DASH!E'+counter;
sheetName = filtered[i];
mySheet = ss.getSheetByName(sheetName);
sheetLink = sheetURL+'#gid='+ mySheet.getSheetId();
if(mySheet.isSheetHidden() == true){
if(ss.getRange(sheetName+"!GH3").getValue() == "Protected"){
richValue = SpreadsheetApp.newRichTextValue()
.setText(sheetName)
.setLinkUrl(sheetLink)
.build();
ss.getRange(cellID).setRichTextValue(richValue);
counter = counter+1;
}
}
}
}
I have reduced the time to load the dashboard by rearranging a number of things and by getting a final array before writing anything out to the dash. I reformatted the cells and sorted the records before the evaluation loops began. I added more status messages, to keep users engaged while the background work was going on. I put the criteria of separating active from hidden sheets last and, depending on which, wrote the values to two different arrays (actvSheets and hidnSheets). Then I processed each array out to the dashboard. I did this in for loops. I suspect I could save even more time to write them out as one command from each array, but I have not been able to figure out how to write out in vertical form. Here is the code. Any refinements are welcome!
/**
* =================
* populateSheetList
* =================
* This function builds the available sheets in the
* 9060DASH sheet--containing all with the Protected
* status.
*/
function populateSheetListNEW() {
msgDash("Clearing sheet list . . . ")
// SpreadsheetApp.getActive().getSheetByName("9060DASH").activate();
var ss = SpreadsheetApp.getActive();
var ui = SpreadsheetApp.getUi();
ss.getRange('9060DASH!D4:E100')
.clear()
.setFontSize(14)
.setHorizontalAlignment('left')
.sort({column: 4, ascending: true})
msgDash("Evaluating sheets . . . ")
var counter = 4;
var sheetName = "";
var cellID= "";
var richValue = "";
var sheetURL = ss.getUrl();
var sheetLink = ""
var mySheet = "";
var actvSheets = [];
var hidnSheets = [];
msgDash("Eliminating administrative sheets . . . ")
var shouldNotContain = '9060'; //array code from stackover to build array without 9060 sheets
var sheetNames = SpreadsheetApp.getActiveSpreadsheet().getSheets().map(s => s.getName());
var filtered = sheetNames.filter(x => !x.toLowerCase().match(shouldNotContain.toLowerCase()));
var sortFilt = filtered.sort();
/** CREATES SHEET ARRAYS */
msgDash("Gathering census worksheets . . . ")
for(var i =0;i<sortFilt.length;i++){
sheetName = sortFilt[i];
mySheet = ss.getSheetByName(sheetName);
if(ss.getRange(sheetName+"!GH3").getValue() == "Protected"){
if(mySheet.isSheetHidden() == false){
actvSheets.push(sheetName);
} else {
hidnSheets.push(sheetName);
}
}
}
msgDash("Gathering active sheets . . . ")
/** WRITING DATA FROM ACTVSHEETS ARRAY */
for(var j = 0; j < actvSheets.length; j++){
sheetName = actvSheets[j];
mySheet = ss.getSheetByName(actvSheets[j]);
sheetLink = sheetURL+'#gid='+ mySheet.getSheetId();
richValue = SpreadsheetApp.newRichTextValue()
.setText(sheetName)
.setLinkUrl(sheetLink)
.build();
cellID = '9060DASH!D' + counter;
counter = counter+1;
ss.getRange(cellID).setRichTextValue(richValue);
}
msgDash("Gathering hidden sheets . . . ");
/** WRITING DATA FROM HDDNSHEETS ARRAY */
counter = 4;
for(var k = 0; k< hidnSheets.length; k++){
sheetName = hidnSheets[k];
mySheet = ss.getSheetByName(hidnSheets[k]);
sheetLink = sheetURL+'#gid='+ mySheet.getSheetId();
richValue = SpreadsheetApp.newRichTextValue()
.setText(sheetName)
.setLinkUrl(sheetLink)
.build();
cellID = '9060DASH!E' + counter;
counter = counter+1;
ss.getRange(cellID).setRichTextValue(richValue);
}
msgDash('Dashboard ready. Enjoy your census work!');
ss.getRange('9060DASH!D2').setValue("For hidden sheets, respond to 'Unhide' instruction. Click Refresh button to rebuild list.");
Utilities.sleep(20);
msgDash(''); //clears messages
}
I've got a calendar with squares in wich each date is wrote :
var myArray:Array = new Array();
var row:Number = 0;
var moonNum:Number;
var holder_txt:MovieClip = new MovieClip;
addChild(holder_txt);
holder_txt.x = 35;
holder_txt.y = 10;
startDay -= 1;
for (var t:int = 0; t < getDays(myDate); t++) {
myArray[t] = (t+1);
var textNum:String = myArray[t];
import box;
import moonPhase;
var square:MovieClip = new box();
var moon:MovieClip = new moonPhase();
holder_txt.addChild(square);
square.name = textNum
moonNum= calculateMoonPhase(myDate.fullYear, myDate.month,t+1);
square.texter.text = textNum +" "+ moonNum;
square.x = (startDay) *75
square.y = (row+1)*65
startDay++;
if(startDay >= 7){
startDay = 0;
row++;
I've got a function that calculate the moonPhase for everyday.
moonNum= calculateMoonPhase(myDate.fullYear, myDate.month,t+1);
It results as a number (between 0 and 8).
I've got movieClip of a moon with 8 frames (new moon,full moon...etc).
I'd like to add the movieClip of the moon on each square with the corresponding frame number.
moonClip.gotoAndStop(moonNum);
I've add each moonNum to each square day :
square.texter.text = textNum +" "+ moonNum;
But I've no idea how to add movieclips to each square day...
Any help ?
It's better to add moonPhase in the class box directly. So for each box that you copied, you have an instance of moon in it to.
But, in your sample code, you can add moon to the square directly to.
square.addChild(moon);
I'm trying create new random List based on other List. But this code doesn't work to update the var
import scala.util.Random
import scala.math
val randSymbol = List(1,2,2,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,6,7,7,7,7,7,7,8)
val _finalSymbol = List(List(0,0,0,0,0),List(0,0,0,0,0),List(0,0,0,0,0))
var i:Int = 0
var a:Int = 0
for (i <- 0 to 2){
_finalSymbol(i) = new List
for (a <- 0 to 4){
var iRandIndex = floor(Random.nextInt() * randSymbol.length).toInt
var iRandSymbol = randSymbol(iRandIndex)
_finalSymbol(i)(a) = iRandSymbol
}
}
Try something like this:
val _finalSymbol = (0 to 2) map { _ => Random.shuffle(randSymbol).take(5) }
And do yourself a favor: buy a scala book.
It's not javascript. At all.
I'm still rather new to JS and GAS and I'm afraid I don't understand arrays real well yet. Your help is greatly appreciated.
Prior to this script, I have another script that pulls information from a list into a spreadsheet that is formatted to look like an invoice. The user then makes changes to the invoice and saves that changes back again to the exact same line that the data was pulled from. This is simply a way of updating changes to the invoice in a user-friendly format.
When I run my script below, I get an error saying that it "Cannot convert"...a list of the data in the array..." to (class)"...the name of the file.
I'm afraid I don't know enough about array classes to solve this problem. I looked for other questions and answers to this same problem, but if I found one, I didn't understand it well enough to apply it to my situation.
The error is happening on line 133 (oh, so close to running the whole script).
function overwriteInvoice() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Invoice");
//start change customer name into customer code
var customerName = sheet.getRange('I2').getValue();
var ccsheet = ss.getSheetByName("CustomerCodes");
var lastRow = ccsheet.getLastRow();
//check how many rows it found
Logger.log("lastRow: " + lastRow);
var lookUp = ccsheet.getRange(2, 1, lastRow, 3).getValues();
for (nn=0; nn<lookUp.length; ++nn) {
if (lookUp[nn][0] == customerName) {break}
}
var customerCode = lookUp[nn][1];
//check customer code to make sure it is returning correct info.
Logger.log("customerCode: " + customerCode);
//end change customer name into customer code
//start build array
var arrayOfData = [];
arrayOfData[0] = sheet.getRange('G2');//invoiceorquote
arrayOfData[1] = sheet.getRange('C10');//invoicequote number
arrayOfData[2] = sheet.getRange('C9');//date
arrayOfData[3] = customerCode;//customer code DON'T CHANGE THIS
arrayOfData[4] = sheet.getRange('I9'); //joblotcode
arrayOfData[5] = sheet.getRange('J27');//total
arrayOfData[6] = sheet.getRange('L32');//invoice paid
arrayOfData[7] = sheet.getRange('B30');//notes
arrayOfData[8] = sheet.getRange('B13');//area13;
arrayOfData[9] = sheet.getRange('D13');//description13;
arrayOfData[10] = sheet.getRange('I13');//quantity13;
arrayOfData[11] = sheet.getRange('J13');//units13;
arrayOfData[12] = sheet.getRange('K13');//pricePerUnit13;
arrayOfData[13] = sheet.getRange('L13');//subtotal13;
arrayOfData[14] = sheet.getRange('B14');//area14;
arrayOfData[15] = sheet.getRange('D14');//description14;
arrayOfData[16] = sheet.getRange('I14');//quantity14;
arrayOfData[17] = sheet.getRange('J14');//units14;
arrayOfData[18] = sheet.getRange('K14');//pricePerUnit14;
arrayOfData[19] = sheet.getRange('L14');//subtotal14;
arrayOfData[20] = sheet.getRange('B15');//area15;
arrayOfData[21] = sheet.getRange('D15');//description15;
arrayOfData[22] = sheet.getRange('I15');//quantity15;
arrayOfData[23] = sheet.getRange('J15');//units15 ;
arrayOfData[24] = sheet.getRange('K15');//pricePerUnit15 ;
arrayOfData[25] = sheet.getRange('L15');//subtotal15 ;
arrayOfData[26] = sheet.getRange('B16');//area16 ;
arrayOfData[27] = sheet.getRange('D16');//description16 ;
arrayOfData[28] = sheet.getRange('I16');//quantity16 ;
arrayOfData[29] = sheet.getRange('J16');//units16 ;
arrayOfData[30] = sheet.getRange('K16');//pricePerUnit16 ;
arrayOfData[31] = sheet.getRange('L16');//subtotal16 ;
arrayOfData[32] = sheet.getRange('B17');//area17 ;
arrayOfData[33] = sheet.getRange('D17');//description17 ;
arrayOfData[34] = sheet.getRange('I17');//quantity17 ;
arrayOfData[35] = sheet.getRange('J17');//units17 ;
arrayOfData[36] = sheet.getRange('K17');//pricePerUnit17 ;
arrayOfData[37] = sheet.getRange('L17');//subtotal17 ;
arrayOfData[38] = sheet.getRange('B18');//area18 ;
arrayOfData[39] = sheet.getRange('D18');//description18 ;
arrayOfData[40] = sheet.getRange('I18');//quantity18 ;
arrayOfData[41] = sheet.getRange('J18');//units18 ;
arrayOfData[42] = sheet.getRange('K18');//pricePerUnit18 ;
arrayOfData[43] = sheet.getRange('L18');//subtotal18 ;
arrayOfData[44] = sheet.getRange('B19');//area19 ;
arrayOfData[45] = sheet.getRange('D19');//description19 ;
arrayOfData[46] = sheet.getRange('I19');//quantity19 ;
arrayOfData[47] = sheet.getRange('J19');//units19 ;
arrayOfData[48] = sheet.getRange('K19');//pricePerUnit19 ;
arrayOfData[49] = sheet.getRange('L19');//subtotal19 ;
arrayOfData[50] = sheet.getRange('B20');//area20 ;
arrayOfData[51] = sheet.getRange('D20');//description20 ;
arrayOfData[52] = sheet.getRange('I20');//quantity20 ;
arrayOfData[53] = sheet.getRange('J20');//units20 ;
arrayOfData[54] = sheet.getRange('K20');//pricePerUnit20 ;
arrayOfData[55] = sheet.getRange('L20');//subtotal20 ;
arrayOfData[56] = sheet.getRange('B21');//area21 ;
arrayOfData[57] = sheet.getRange('D21');//description21 ;
arrayOfData[58] = sheet.getRange('I21');//quantity21 ;
arrayOfData[59] = sheet.getRange('J21');//units21 ;
arrayOfData[60] = sheet.getRange('K21');//pricePerUnit21 ;
arrayOfData[61] = sheet.getRange('L21');//subtotal21 ;
arrayOfData[62] = sheet.getRange('B22');//area22 ;
arrayOfData[63] = sheet.getRange('D22');//description22 ;
arrayOfData[64] = sheet.getRange('I22');//quantity22 ;
arrayOfData[65] = sheet.getRange('J22');//units22 ;
arrayOfData[66] = sheet.getRange('K22');//pricePerUnit22 ;
arrayOfData[67] = sheet.getRange('L22');//subtotal22 ;
arrayOfData[68] = sheet.getRange('B23');//area23 ;
arrayOfData[69] = sheet.getRange('D23');//description23 ;
arrayOfData[70] = sheet.getRange('I23');//quantity23 ;
arrayOfData[71] = sheet.getRange('J23');//units23 ;
arrayOfData[72] = sheet.getRange('K23');//pricePerUnit23 ;
arrayOfData[73] = sheet.getRange('L23');//subtotal23 ;
arrayOfData[74] = sheet.getRange('B24');//area24 ;
arrayOfData[75] = sheet.getRange('D24');//description24 ;
arrayOfData[76] = sheet.getRange('I24');//quantity24 ;
arrayOfData[77] = sheet.getRange('J24');//units24 ;
arrayOfData[78] = sheet.getRange('K24');//pricePerUnit24 ;
arrayOfData[79] = sheet.getRange('L24');//subtotal24 ;
//end build array
//start find correct row
var searchFor = sheet.getRange("C10").getValue();
var invoiceRecord = ss.getSheetByName("InvoiceRecord");
var lastRow = invoiceRecord.getLastRow();
//verify last row
Logger.log("lastRow: " + lastRow);
//create an array of values to search
var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues();
//start search the array
for (jj=0; jj<searchArea.length; ++jj) {
if (searchArea[jj][1]==searchFor) {break};
}
var copyToRow = searchArea[jj];
//end find the correct row
//ERROR!
invoiceRecord.getRange(copyToRow, 1, 1, arrayOfData.length).setValues(arrayOfData);
//ERROR!
ui.alert('Invoice Changes Saved', ui.ButtonSet.OK);
}
Thank you so much for your help.
Update
I am so frustrated by this problem that I decided to take a different tact to narrow down the cause. I removed the array entirely and assigned each value to a variable in order to see if the array is the problem. Apparently, it is not. The results when I run this code now say error: "Cannot convert NaN to (class). (line 140, file "OverwriteExistingInvoice")"
function overwriteInvoice() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Invoice");
//start change customer name into customer code
var customerName = sheet.getRange('I2').getValue();
var ccsheet = ss.getSheetByName("CustomerCodes");
var lastRow = ccsheet.getLastRow();
//check how many rows it found
Logger.log("lastRow: " + lastRow);
var lookUp = ccsheet.getRange(2, 1, lastRow-2, 3).getValues();
var nn=0
for (nn=0; nn<lookUp.length; ++nn) {
if (lookUp[nn][0] == customerName) {break}
}
var customerCode = lookUp[nn][1];
//check customer code to make sure it is returning correct info.
Logger.log("customerCode: " + customerCode);
//end change customer name into customer code
//start build array
var column0 = sheet.getRange('G2').getValue();//invoiceorquote
var column1 = sheet.getRange('C10').getValue();//invoicequote number
var column2 = sheet.getRange('C9').getValue();//date
var column3 = customerCode;//customer code DON'T CHANGE THIS
var column4 = sheet.getRange('I9').getValue(); //joblotcode
var column5 = sheet.getRange('J27').getValue();//total
var column6 = sheet.getRange('L32').getValue();//invoice paid
var column7 = sheet.getRange('B30').getValue();//notes
var column8 = sheet.getRange('B13').getValue();//area13;
var column9 = sheet.getRange('D13').getValue();//description13;
var column10 = sheet.getRange('I13').getValue();//quantity13;
var column11 = sheet.getRange('J13').getValue();//units13;
var column12 = sheet.getRange('K13').getValue();//pricePerUnit13;
var column13 = sheet.getRange('L13').getValue();//subtotal13;
var column14 = sheet.getRange('B14').getValue();//area14;
var column15 = sheet.getRange('D14').getValue();//description14;
var column16 = sheet.getRange('I14').getValue();//quantity14;
var column17 = sheet.getRange('J14').getValue();//units14;
var column18 = sheet.getRange('K14').getValue();//pricePerUnit14;
var column19 = sheet.getRange('L14').getValue();//subtotal14;
var column20 = sheet.getRange('B15').getValue();//area15;
var column21 = sheet.getRange('D15').getValue();//description15;
var column22 = sheet.getRange('I15').getValue();//quantity15;
var column23 = sheet.getRange('J15').getValue();//units15 ;
var column24 = sheet.getRange('K15').getValue();//pricePerUnit15 ;
var column25 = sheet.getRange('L15').getValue();//subtotal15 ;
var column26 = sheet.getRange('B16').getValue();//area16 ;
var column27 = sheet.getRange('D16').getValue();//description16 ;
var column28 = sheet.getRange('I16').getValue();//quantity16 ;
var column29 = sheet.getRange('J16').getValue();//units16 ;
var column30 = sheet.getRange('K16').getValue();//pricePerUnit16 ;
var column31 = sheet.getRange('L16').getValue();//subtotal16 ;
var column32 = sheet.getRange('B17').getValue();//area17 ;
var column33 = sheet.getRange('D17').getValue();//description17 ;
var column34 = sheet.getRange('I17').getValue();//quantity17 ;
var column35 = sheet.getRange('J17').getValue();//units17 ;
var column36 = sheet.getRange('K17').getValue();//pricePerUnit17 ;
var column37 = sheet.getRange('L17').getValue();//subtotal17 ;
var column38 = sheet.getRange('B18').getValue();//area18 ;
var column39 = sheet.getRange('D18').getValue();//description18 ;
var column40 = sheet.getRange('I18').getValue();//quantity18 ;
var column41 = sheet.getRange('J18').getValue();//units18 ;
var column42 = sheet.getRange('K18').getValue();//pricePerUnit18 ;
var column43 = sheet.getRange('L18').getValue();//subtotal18 ;
var column44 = sheet.getRange('B19').getValue();//area19 ;
var column45 = sheet.getRange('D19').getValue();//description19 ;
var column46 = sheet.getRange('I19').getValue();//quantity19 ;
var column47 = sheet.getRange('J19').getValue();//units19 ;
var column48 = sheet.getRange('K19').getValue();//pricePerUnit19 ;
var column49 = sheet.getRange('L19').getValue();//subtotal19 ;
var column50 = sheet.getRange('B20').getValue();//area20 ;
var column51 = sheet.getRange('D20').getValue();//description20 ;
var column52 = sheet.getRange('I20').getValue();//quantity20 ;
var column53 = sheet.getRange('J20').getValue();//units20 ;
var column54 = sheet.getRange('K20').getValue();//pricePerUnit20 ;
var column55 = sheet.getRange('L20').getValue();//subtotal20 ;
var column56 = sheet.getRange('B21').getValue();//area21 ;
var column57 = sheet.getRange('D21').getValue();//description21 ;
var column58 = sheet.getRange('I21').getValue();//quantity21 ;
var column59 = sheet.getRange('J21').getValue();//units21 ;
var column60 = sheet.getRange('K21').getValue();//pricePerUnit21 ;
var column61 = sheet.getRange('L21').getValue();//subtotal21 ;
var column62 = sheet.getRange('B22').getValue();//area22 ;
var column63 = sheet.getRange('D22').getValue();//description22 ;
var column64 = sheet.getRange('I22').getValue();//quantity22 ;
var column65 = sheet.getRange('J22').getValue();//units22 ;
var column66 = sheet.getRange('K22').getValue();//pricePerUnit22 ;
var column67 = sheet.getRange('L22').getValue();//subtotal22 ;
var column68 = sheet.getRange('B23').getValue();//area23 ;
var column69 = sheet.getRange('D23').getValue();//description23 ;
var column70 = sheet.getRange('I23').getValue();//quantity23 ;
var column71 = sheet.getRange('J23').getValue();//units23 ;
var column72 = sheet.getRange('K23').getValue();//pricePerUnit23 ;
var column73 = sheet.getRange('L23').getValue();//subtotal23 ;
var column74 = sheet.getRange('B24').getValue();//area24 ;
var column75 = sheet.getRange('D24').getValue();//description24 ;
var column76 = sheet.getRange('I24').getValue();//quantity24 ;
var column77 = sheet.getRange('J24').getValue();//units24 ;
var column78 = sheet.getRange('K24').getValue();//pricePerUnit24 ;
var column79 = sheet.getRange('L24').getValue();//subtotal24 ;
//end build array
//start find correct row
var searchFor = sheet.getRange("C10").getValue();
var invoiceRecord = ss.getSheetByName("InvoiceRecord");
var lastRow = invoiceRecord.getLastRow();
//verify last row
Logger.log("lastRow: " + lastRow);
//create an array of values to search
var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues();
//start search the array
var jj=0
for (jj=0; jj<searchArea.length; ++jj) {
if (searchArea[jj][1]==searchFor) {break};
}
Logger.log('jj value: ' + jj);
var copyToRow = searchArea[jj];
Logger.log('copyToRow: ' + copyToRow);
//end find correct row
//start copy over same entry
//error on next line
invoiceRecord.getRange(copyToRow-1, 1).setValue(column0);
//error on above line
ui.alert('Invoice Changes Saved', ui.ButtonSet.OK);
}
I really appreciate all the help thus far. I am about to tear my hair out!
UPDATE
This is the code that finally worked correctly.
function overwriteInvoice() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Invoice");
//start change customer name into customer code
var customerName = sheet.getRange('I2').getValue();
var ccsheet = ss.getSheetByName("CustomerCodes");
var lastRow = ccsheet.getLastRow();
//check how many rows it found
Logger.log("lastRow: " + lastRow);
var lookUp = ccsheet.getRange(2, 1, lastRow-2, 3).getValues();
var nn=0
for (nn=0; nn<lookUp.length; ++nn) {
if (lookUp[nn][0] == customerName) {break}
}
var customerCode = lookUp[nn][1];
//check customer code to make sure it is returning correct info.
Logger.log("customerCode: " + customerCode);
//end change customer name into customer code
//start build array
var arrayOfData = [];
arrayOfData[0] = sheet.getRange('G2').getValue();//invoiceorquote
arrayOfData[1] = sheet.getRange('C10').getValue();//invoicequote number
arrayOfData[2] = sheet.getRange('C9').getValue();//date
arrayOfData[3] = customerCode;//customer code DON'T CHANGE THIS
arrayOfData[4] = sheet.getRange('I9').getValue(); //joblotcode
arrayOfData[5] = sheet.getRange('J27').getValue();//total
arrayOfData[6] = sheet.getRange('L32').getValue();//invoice paid
arrayOfData[7] = sheet.getRange('B30').getValue();//notes
arrayOfData[8] = sheet.getRange('B13').getValue();//area13;
arrayOfData[9] = sheet.getRange('D13').getValue();//description13;
arrayOfData[10] = sheet.getRange('I13').getValue();//quantity13;
arrayOfData[11] = sheet.getRange('J13').getValue();//units13;
arrayOfData[12] = sheet.getRange('K13').getValue();//pricePerUnit13;
arrayOfData[13] = sheet.getRange('L13').getValue();//subtotal13;
arrayOfData[14] = sheet.getRange('B14').getValue();//area14;
arrayOfData[15] = sheet.getRange('D14').getValue();//description14;
arrayOfData[16] = sheet.getRange('I14').getValue();//quantity14;
arrayOfData[17] = sheet.getRange('J14').getValue();//units14;
arrayOfData[18] = sheet.getRange('K14').getValue();//pricePerUnit14;
arrayOfData[19] = sheet.getRange('L14').getValue();//subtotal14;
arrayOfData[20] = sheet.getRange('B15').getValue();//area15;
arrayOfData[21] = sheet.getRange('D15').getValue();//description15;
arrayOfData[22] = sheet.getRange('I15').getValue();//quantity15;
arrayOfData[23] = sheet.getRange('J15').getValue();//units15 ;
arrayOfData[24] = sheet.getRange('K15').getValue();//pricePerUnit15 ;
arrayOfData[25] = sheet.getRange('L15').getValue();//subtotal15 ;
arrayOfData[26] = sheet.getRange('B16').getValue();//area16 ;
arrayOfData[27] = sheet.getRange('D16').getValue();//description16 ;
arrayOfData[28] = sheet.getRange('I16').getValue();//quantity16 ;
arrayOfData[29] = sheet.getRange('J16').getValue();//units16 ;
arrayOfData[30] = sheet.getRange('K16').getValue();//pricePerUnit16 ;
arrayOfData[31] = sheet.getRange('L16').getValue();//subtotal16 ;
arrayOfData[32] = sheet.getRange('B17').getValue();//area17 ;
arrayOfData[33] = sheet.getRange('D17').getValue();//description17 ;
arrayOfData[34] = sheet.getRange('I17').getValue();//quantity17 ;
arrayOfData[35] = sheet.getRange('J17').getValue();//units17 ;
arrayOfData[36] = sheet.getRange('K17').getValue();//pricePerUnit17 ;
arrayOfData[37] = sheet.getRange('L17').getValue();//subtotal17 ;
arrayOfData[38] = sheet.getRange('B18').getValue();//area18 ;
arrayOfData[39] = sheet.getRange('D18').getValue();//description18 ;
arrayOfData[40] = sheet.getRange('I18').getValue();//quantity18 ;
arrayOfData[41] = sheet.getRange('J18').getValue();//units18 ;
arrayOfData[42] = sheet.getRange('K18').getValue();//pricePerUnit18 ;
arrayOfData[43] = sheet.getRange('L18').getValue();//subtotal18 ;
arrayOfData[44] = sheet.getRange('B19').getValue();//area19 ;
arrayOfData[45] = sheet.getRange('D19').getValue();//description19 ;
arrayOfData[46] = sheet.getRange('I19').getValue();//quantity19 ;
arrayOfData[47] = sheet.getRange('J19').getValue();//units19 ;
arrayOfData[48] = sheet.getRange('K19').getValue();//pricePerUnit19 ;
arrayOfData[49] = sheet.getRange('L19').getValue();//subtotal19 ;
arrayOfData[50] = sheet.getRange('B20').getValue();//area20 ;
arrayOfData[51] = sheet.getRange('D20').getValue();//description20 ;
arrayOfData[52] = sheet.getRange('I20').getValue();//quantity20 ;
arrayOfData[53] = sheet.getRange('J20').getValue();//units20 ;
arrayOfData[54] = sheet.getRange('K20').getValue();//pricePerUnit20 ;
arrayOfData[55] = sheet.getRange('L20').getValue();//subtotal20 ;
arrayOfData[56] = sheet.getRange('B21').getValue();//area21 ;
arrayOfData[57] = sheet.getRange('D21').getValue();//description21 ;
arrayOfData[58] = sheet.getRange('I21').getValue();//quantity21 ;
arrayOfData[59] = sheet.getRange('J21').getValue();//units21 ;
arrayOfData[60] = sheet.getRange('K21').getValue();//pricePerUnit21 ;
arrayOfData[61] = sheet.getRange('L21').getValue();//subtotal21 ;
arrayOfData[62] = sheet.getRange('B22').getValue();//area22 ;
arrayOfData[63] = sheet.getRange('D22').getValue();//description22 ;
arrayOfData[64] = sheet.getRange('I22').getValue();//quantity22 ;
arrayOfData[65] = sheet.getRange('J22').getValue();//units22 ;
arrayOfData[66] = sheet.getRange('K22').getValue();//pricePerUnit22 ;
arrayOfData[67] = sheet.getRange('L22').getValue();//subtotal22 ;
arrayOfData[68] = sheet.getRange('B23').getValue();//area23 ;
arrayOfData[69] = sheet.getRange('D23').getValue();//description23 ;
arrayOfData[70] = sheet.getRange('I23').getValue();//quantity23 ;
arrayOfData[71] = sheet.getRange('J23').getValue();//units23 ;
arrayOfData[72] = sheet.getRange('K23').getValue();//pricePerUnit23 ;
arrayOfData[73] = sheet.getRange('L23').getValue();//subtotal23 ;
arrayOfData[74] = sheet.getRange('B24').getValue();//area24 ;
arrayOfData[75] = sheet.getRange('D24').getValue();//description24 ;
arrayOfData[76] = sheet.getRange('I24').getValue();//quantity24 ;
arrayOfData[77] = sheet.getRange('J24').getValue();//units24 ;
arrayOfData[78] = sheet.getRange('K24').getValue();//pricePerUnit24 ;
arrayOfData[79] = sheet.getRange('L24').getValue();//subtotal24 ;
//end build array
//start find correct row
var searchFor = sheet.getRange("C10").getValue();
var invoiceRecord = ss.getSheetByName("InvoiceRecord");
var lastRow = invoiceRecord.getLastRow();
//verify last row
Logger.log("lastRow: " + lastRow);
//create an array of values to search
var searchArea = invoiceRecord.getRange(4, 1, lastRow, 4).getValues();
//start search the array
var jj=0
for (jj=0; jj<searchArea.length; ++jj) {
if (searchArea[jj][1]==searchFor) {break};
}
Logger.log('jj value: ' + jj);
var copyToRow = jj+4;
Logger.log('copyToRow: ' + copyToRow);
//end find correct row
//start copy over the same entry
var outerArray = [];
outerArray.push(arrayOfData);
invoiceRecord.getRange(copyToRow, 1, 1, 80).setValues(outerArray);
ui.alert('Invoice Changes Saved', ui.ButtonSet.OK);
}
Add the getValue() method to all of the lines with:
arrayOfData[x] = sheet.getRange('XX');//What to get
Right now, a range object is being put into the array, and not a value.
Should be:
arrayOfData[x] = sheet.getRange('XX').getValue();//Note
Create an outer array, and put arrayOfData into it:
var outerArray = [];
outerArray.push(arrayOfData);
//getRange(Start row, start column, number of rows, number of columns)
invoiceRecord.getRange(copyToRow, 1, outerArray.length, outerArray[0].length)
.setValues(outerArray);
The setValues() method must have a two dimensional array. If this is for just one row of data, then there will only be one inner array.
I've worked out a script to gather data from a remote MS SQL db and populate a Google Sheet. I need some help further refining the code to select a specific sheet and clear the sheet before continuing the script so that each time the script runs the sheet has the latest data from the db table.
Here is the script.
function database_connection() {
var conn = Jdbc.getConnection("jdbc:sqlserver://x.x.x.x:1433;" + "databaseName=mydbname;user=mydbusername;password=mypassword;");
var stmt = conn.createStatement();
stmt.setMaxRows(500);
var start = new Date();
var rs = stmt.executeQuery('select * from table_name');
var doc = SpreadsheetApp.getActiveSpreadsheet();
var cell = doc.getRange('a1');
var row = 0;
while (rs.next()) {
for (var col = 0; col < rs.getMetaData().getColumnCount(); col++) {
cell.offset(row, col).setValue(rs.getString(col + 1));
}
row++;
}
rs.close();
stmt.close();
conn.close();
var end = new Date();
Logger.log('Time elapsed: ' + (end.getTime() - start.getTime()));
}
To select a sheet you can use getSheetByName or getSheets as per your requirement.
To clear the all the cells in a sheet, use the clear method of class Range.
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheetByName("sheetName");
sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).clear()
Googling will definitely help...
Edit
getDataRange can also be used to clear all the ranges (see below)
This is how you can use bulk insert
function database_connection() {
var conn = Jdbc.getConnection("jdbc:sqlserver://x.x.x.x:1433;" + "databaseName=mydbname;user=mydbusername;password=mypassword;");
var stmt = conn.createStatement();
stmt.setMaxRows(500);
var start = new Date();
var rs = stmt.executeQuery('select * from table_name');
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheetByname("sheetName")
sheet.getDataRange().clear();
var data = [], rowData;
var numCols = rs.getMetaData().getColumnCount(); // <- not sure about this, basically i want to capture number of columns
while (rs.next()) {
rowData = [];
for (var col = 0; col < numCols; col++) {
rowData.push(rs.getString(col + 1));
}
data.push(rowData);
}
sheet.getRange(1, 1, data.length, numCols).setValues(data); // <- single operation to insert
rs.close();
stmt.close();
conn.close();
var end = new Date();
Logger.log('Time elapsed: ' + (end.getTime() - start.getTime()));
}