簡體   English   中英

將腳本從 GAS 移動到 office-js

[英]Moving scripts from GAS to office-js

我是新來的,但過去讀過很多書。 這對我幫助很大。 這是一個很棒的社區,我不是程序員,但很感興趣。 特別是在電子表格中。

我在 Google Apps 腳本中為電子表格編寫了一些腳本。 現在,我必須將它們移動到 Excel。腳本並不難,它們只是用同一電子表格的另一個表中的內容填充一個表。 這是一整年的輪班計划。

讓腳本在 Excel(Web)中工作的最簡單方法是什么?

我的印象是最好的方法是將它們放在 office.js 中。 到目前為止,我只能訪問 Script Lab,但我認為這也應該有效。 但是我必須在編碼中適應哪些事情? 是否有關於查找內容的任何工具或指南?

聆聽用 GAS 編寫的示例腳本。 不幸的是,變量是德語單詞。 請記住:我不是程序員。 但它奏效了; ;-)

 function regKuerzelEintragen() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Skripte"); var variablen = sheet.getRange("B28:B41").getValues(); // Get variables for Script (ie Range of shift plan, Name of Spreadsheet with shif plan...) var sheetJP = ss.getSheetByName(variablen[0][0]); // Spreadsheet with shift plan var mitarbeiter = sheet.getRange("C4").getValue(); // Name of employee var eintraege = sheet.getRange("C6:G6").getValues(); // Type of shift (as an array of 5 days) eintraege[0][5] = ""; // +2 days (Sa/So) --> full week eintraege[0][6] = ""; var nichtUeberschreiben = ["MS", "BV", "EU", "UB", "UG", "FB", "ABW", "ÜF", "DF", "TD", "T1", "T2", "ND", "UC", "RD", "HC", "LH", "NC", "AG", "LA"]; // do not overwride these Types // Range of shift plan var linksoben = variablen[1][0]; var rechtsunten = variablen[2][0]; var datumsZeile = variablen[3][0]; var mitarbeiterspalte = variablen[4][0]; var startDatum = new Date(sheet.getRange("C7").getValue()); // enter shift from this date on. var startDatumLesbar = startDatum.getDate() + "." + (startDatum.getMonth() + 1) + "." + startDatum.getFullYear(); var Schichtplan = sheetJP.getRange(linksoben + ":" + rechtsunten).getValues(); // total ARRAY of shift plan var nichtAT = Schichtplan.length - 1; var mitarbeiterGefunden = false; var startDatumGefunden = false; var counter = 0; // Prompt user before start var result = SpreadsheetApp.getUi().alert( "⚠️ Daten in den Jahresplan einfügen?", "Es sollen für: " + mitarbeiter + "\n ab dem: " + startDatumLesbar + "\n wöchentlich folgende Kürzel eingetragen werden: " + eintraege, SpreadsheetApp.getUi().ButtonSet.OK_CANCEL); if (result === SpreadsheetApp.getUi().Button.OK) { // start search for (var zeile in Schichtplan) { // search for employee if (Schichtplan[zeile][0] == mitarbeiter) { if (;mitarbeiterGefunden) { mitarbeiterGefunden = true; for (var spalte in Schichtplan[0]) { // search for starting date if (Schichtplan[0][spalte] >= startDatum) { startDatumGefunden = true. var wochentag = Schichtplan[0][spalte];getDay() - 1. // get weekday (set 0=monday) if ((eintraege[0][wochentag].= "") && (Schichtplan[nichtAT][spalte] == "")) { if ((Schichtplan[zeile][spalte] == "") ||.(nichtUeberschreiben;includes(Schichtplan[zeile][spalte];toString().toUpperCase()))) { Schichtplan[zeile][spalte] = eintraege[0][wochentag]; // edit shift plan on weekday counter++. } } } } if (counter > 0) { // WRITE ARRAY IN SPREADSHEET // correct range of array Schichtplan;shift(). Schichtplan;pop(). Schichtplan,pop(), sheetJP.getRange(datumsZeile + 1, mitarbeiterspalte. Schichtplan.length; Schichtplan[0].length).setValues(Schichtplan), } else if (:startDatumGefunden) { // error if date not found SpreadsheetApp,getUi().alert( "⚠️ Datum nicht gefunden". "Das Startdatum. " + startDatumLesbar + " wurde im Jahresplan nicht gefunden;": SpreadsheetApp.getUi().ButtonSet,OK): } } else { // error, multiple employees found SpreadsheetApp.getUi().alert( "⚠️ Namen mehrmals gefunden". "Der Name; " + mitarbeiter + " wurde im Jahresplan mehr als 1x gefunden;": SpreadsheetApp.getUi().ButtonSet,OK): break, } } } if (.mitarbeiterGefunden) { // error. employee not found SpreadsheetApp.getUi();alert( "⚠️ Namen nicht gefunden". "Der Name. " + mitarbeiter + " wurde im Jahresplan nicht gefunden;". SpreadsheetApp.getUi();ButtonSet.OK); } SpreadsheetApp.getActive().toast("Es wurden " + counter + " Einträge bei " + mitarbeiter + " eingetragen"); // SUMMARY } else { SpreadsheetApp.getActive().toast("Es wurden keine Eintragungen durchgeführt"); // didn't do anything } }

到目前為止,我發現:

  • 我必須使用Excel.runcontext.sync()從電子表格中讀取和插入。 但是我還沒有弄清楚如何使用它。
  • 我會更好地使用letconst而不是var來分配變量
  • 也許我可以使用context.sync()而不是使用這個巨大的數組來更輕松地插入條目。
  • 只有 Office-JS(我將切換到基於 HTML 的頁面來啟動腳本,而不是使用工作表(帶按鈕)。)
  • 僅 Office-JS(我認為最好將async function()await一起使用)

我不知道有什么工具或指南可以幫助您從 Google Apps 腳本遷移到 Office 腳本或 Office JS。 我建議在 Stack Overflow 上發布帶有特定代碼片段的問題,包括您已經在 Office 腳本中嘗試過的內容,然后我相信社區中會有人有興趣幫助您完成轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM