Scripting: samples |
Registering scripting interfaces
To be able to use scripting, you must register the scripting interfaces in the Windows registry
database. To do this, run GS-Calc as an administrator (e.g. right-click GS-Calc shortcut/icon and
on the context menu choose "Run as administrator") and use the
Settings > Register Scripting Interfaces command.
Similarly, if you no longer need scripting, you can use the
Settings > Unregister Scripting Interfaces command to remove all
registry entries added earlier. Uninstalling GS-Calc will unregister those interfaces as well.
Creating scripts
You can create your scripts either as global scripts saved in the program settings and available to all databases or you can
create scripts stored in a given GS-Calc workbook and available only after you open that workbook.
To create these scripts use the "File > Application Scripts" and "File > Database Scripts" commands.
The "(...) Scripts" dialog box enables you to organize your scripts in subfolders, test them to locate errors, copy/import/export them etc.
Notes:
If a workbook is already loaded, an executed script, either global or local, automatically refers to that workbook and the active worksheet and using the Open(...) functions with the same workbook path has no effect.
To add the following sample scripts to your GS-Calc, click File > Application Scripts, then in the displayed dialog box
click New > JScript and copy/paste the script text - it'll be saved automatically in your global program settings.
To execute the added scripts, open that dialog box and click Run or assign some Ctrl+Shift+... shortcut to execute it using the keyboard.
Merging rows from multiple text files from a given folder to the current worksheet
var wbook = GSCalc.ThisWorkbook(); var merge = GSCalc.CreateMergeParams(); merge.path = "e:\\my_folder\\some_text_file??.txt"; // or e.g. merge.path = "e:\\my_folder\\some_text_file*.txt"; // or e.g. merge.path = "e:\\my_folder\\some_text_file_01.txt"; // or e.g. merge.path = "e:\\my_folder\\*.csv"; // or e.g. merge.path = "e:\\my_folder\\"; // or e.g. merge.path = GSCalc.GetFolder("Find folder", "e:\\"); // or e.g. merge.path = GSCalc.GetFilePath(false, "Merge from text file", "e:\\", "d:\\my_folder", ".csv") merge.table = ""; merge.fieldNames = false; var text = GSCalc.CreateTextParams(); text.separator = ","; text.encoding = "utf8"; // or text.encoding = "windows"; text.autoFitColumns = false; wbook.MergeRowsFromTextFile(merge, text);
Merging rows from multiple Excel XLSX files from a given folder to the current worksheet
var wbook = GSCalc.ThisWorkbook(); var merge = GSCalc.CreateMergeParams(); merge.path = "e:\\my_folder\\some_text_file??.xlsx"; // or e.g. merge.path = "e:\\my_folder\\some_text_file*.xlsx"; // or e.g. merge.path = "e:\\my_folder\\some_text_file_01.xlsx"; // or e.g. merge.path = "e:\\my_folder\\*.xlsx"; // or e.g. merge.path = "e:\\my_folder\\"; // or e.g. merge.path = GSCalc.GetFolder("Find folder", "e:\\"); // or e.g. merge.path = GSCalc.GetFilePath(false, "Merge from text file", "e:\\", "d:\\my_folder", ".xlsx") // no table name - merge rows from the default worksheet in each XLSX file merge.table = ""; merge.fieldNames = false; wbook.MergeRowsFromExcelFile(merge); // or e.g. wbook.MergeRowsFromMySQLFile(merge); // or e.g. wbook.MergeRowsFromFile(merge);
Importing tables from multiple text files from a given folder to the current workbook
var wbook = GSCalc.ThisWorkbook(); var text = GSCalc.CreateTextParams(); text.separator = ","; text.encoding = "utf8"; // or text.encoding = "windows"; text.autoFitColumns = false; wbook.MergeTableFromTextFile("e:\\my_folder\\some_text_file??.txt", "", text); // or e.g. wbook.MergeTableFromTextFile("e:\\my_folder\\some_text_file*.txt", "", text); // or e.g. wbook.MergeTableFromTextFile("e:\\my_folder\\some_text_file_01.txt", "", text); // or e.g. wbook.MergeTableFromTextFile("e:\\my_folder\\*.csv", "", text); // or e.g. wbook.MergeTableFromTextFile("e:\\my_folder\\", "", text); // or e.g. wbook.MergeTableFromTextFile("e:\\my_folder\\some_text_file??.txt", "", text); // or e.g. wbook.MergeTableFromTextFile(GSCalc.GetFolder("Find folder", "e:\\"), "", text); // or e.g. wbook.MergeTableFromTextFile(GSCalc.GetFilePath(false, "Merge from text file", "e:\\", "d:\\my_folder", ".csv"), "", text);
Importing tables from multiple Excel XLSX files from a given folder to the current workbook
var wbook = GSCalc.ThisWorkbook(); wbook.MergeTableFromExcelFile("e:\\my_folder\\some_text_file??.xlsx", ""); // or e.g. wbook.MergeTableFromExcelFile("e:\\my_folder\\some_text_file*.xlsx", ""); // or e.g. wbook.MergeTableFromExcelFile("e:\\my_folder\\some_text_file_01.xlsx", ""); // or e.g. wbook.MergeTableFromExcelFile("e:\\my_folder\\*.csv", ""); // or e.g. wbook.MergeTableFromExcelFile("e:\\my_folder\\", ""); // or e.g. wbook.MergeTableFromExcelFile("e:\\my_folder\\some_text_file??.xlsx", ""); // or e.g. wbook.MergeTableFromExcelFile(GSCalc.GetFolder("Find folder", "e:\\"), ""); // or e.g. wbook.MergeTableFromExcelFile(GSCalc.GetFilePath(false, "Merge from Excel XLSX file", "e:\\", "d:\\my_folder", ".xlsx"), "");
var wbook = GSCalc.ThisWorkbook(); var filePath = wbook.Release(); GSCalc.MessageBox("Closed file: " + filePath, "ok", 1, "information"); // You can keep on editing the workbook as it's already loaded. You have to use the Attach() method to open/connect it again // if you want to save it or otherwise the "Save File As" message box will be displayed.
var wbook = GSCalc.ThisWorkbook(); if (wbook.AttachFile("") == 1) { // An empty parameter - file path indicates that we're attaching a file from the recent ReleaseFile(). // AttachFile() returns 1 if the file was modified after you used ReleaseFile(). // In that case you might want to reload it to see the changes wbook.Reload(); } // After checking and reloading you can release it again wbook.Release();
Activating the n-th worksheetin in the current workbook (ignoring subfolders)
var wbook = GSCalc.ThisWorkbook(); // get the first "child" element in the specified folder - in this case: the main folder // if path.length = 0 then there is no more worksheets or subfolders var path = wbook.GetFirstTreeItem("\\"); // iterate through direct "child" elements of the specified folder (ignoring nested subfolders) // to find the 10th worksheet var counter = 0; while (path.length) { if (path.charAt(path.length - 1) == '\\') { // the terminating '\\' means it's a folder GSCalc.MessageBox("folder - " + path, "ok", 1, "information"); } else { // worksheet if (++counter == 10) { break; } } path = GSBase.GetNextDatabaseItem(path); } if (path.length) { // activate the 10th worksheet wbook.SetActiveWorksheet(path); }
var wbook = GSCalc.ThisWorkbook(); var folders = new Array(10); var i = 0; var treeItem = wbook.GetFirstTreeItem(""); do { if ( wbook.IsFolder(treeItem) ) { GSCalc.MessageBox("Folder: " + treeItem, "ok", 1, "information"); if ( !wbook.IsFolderEmpty(treeItem) ) { folders[i++] = treeItem; treeItem = wbook.GetFirstTreeItem(treeItem); continue; } } else if ( wbook.IsWorksheet(treeItem) ) { GSCalc.MessageBox("Worksheet: " + treeItem, "ok", 1, "information"); } treeItem = wbook.GetNextTreeItem(treeItem); if ( treeItem == "" && i > 0 ) { treeItem = wbook.GetNextTreeItem(folders[--i]); } } while ( treeItem );
try { var wbook = GSCalc.OpenWorkbook("d:\\sample.gsc", ""); var wsheet = wbook.GetActiveWorksheet(); wbook.SelectTreeItem("formulas"); // display amount in "b9" as thousands of dollars var formatParams = wsheet.CreateFormatParams(); formatParams.SetCurrencyFormat(0, "$ 1.1", "$", false, false, 1); wsheet.selectedRange = "b9"; wsheet.SetCellFormat(formatParams); // if the window is to be updated before the script terminates, UpdateWindow() must be called wsheet.UpdateWindow(); // insert a new formula in b10 wsheet.InsertData("b10", "=fv(0.65%, 36, -500, -5500, 0)", true); wbook.WaitForUpdate(); // repeat the formatting wsheet.selectedRange = "b10"; wsheet.SetCellFormat(formatParams); // save all as a new encrypted file, specifying no path to display the "Save" dialog box wbook.SetFilePassword(true, "blowfish", "", "dk3zPi"); wbook.SaveAs(""); } catch(e) { GSCalc.MessageBox(e, "ok", 1, "error"); }
try { // delete the "sample4" worksheet from the "2d charts" folder var wbook = GSCalc.OpenWorkbook("d:\\sample.gsc", ""); wbook.SelectTreeItem("2d charts\\sample4"); wbook.DeleteTreeItem(); // insert a new "general" folder as the last folder of the tree wbook.SelectTreeItem(""); wbook.InsertFolder("general"); // move the folder to the beginning of the tree wbook.MoveTreeItem("general", wbook.GetFirstTreeItem("")); // move the "formulas" and "data types" worksheets to "general" wbook.MoveTreeItem("data types", "general"); wbook.MoveTreeItem("formulas", "general"); // insert a new worksheet as the last one in "general" wbook.SelectTreeItem("general"); wbook.InsertWorksheet("more formulas"); wbook.Save(); wbook.Close(); } catch(e) { GSCalc.MessageBox(e, "ok", 1, "error"); }
Opening a text file and saving it to new *.gsc file
var textParams = GSCalc.CreateTextParams(); textParams.separator = ","; textParams.quotingSymbol = "\""; textParams.encoding = "utf8"; var wbook = GSCalc.OpenTextFile("d:\\test456.txt", false, textParams); wbook.SaveAs("d:\\test456.gsc");