Open ryuji0909 opened 3 months ago
function doGet(e) { const template = HtmlService.createTemplateFromFile('index'); const dropdownData = getDropdownData(); // ドロップダウンデータの取得
template.countryData = dropdownData.country; // 国のデータをテンプレートに渡す template.currencyData = dropdownData.currency; // 通貨のデータをテンプレートに渡す let param = [];
if (!e.parameter.p2) { template.isNewEntry = true; // 新規登録用フラグ template.param = []; } else { const keyword = e.parameter.p2 ? e.parameter.p2 : e.parameter.p1; const searchColumn = e.parameter.p2 ? "A:A" : "A:A"; const items = findByTextFinder(keyword, searchColumn); if (items.length > 0) { param = [ items[0].supplier_id, items[0].supplier_code, items[0].supplier_companyname, items[0].supplier_country, items[0].supplier_officeaddress, items[0].supplier_contactname, items[0].supplier_contactmail, items[0].supplier_contacttel, items[0].supplier_contactfax, items[0].supplier_contactperson3, items[0].supplier_hosoku_2, items[0].supplier_warehouseaddress, items[0].supplier_warehousename, items[0].supplier_warehouseemail, items[0].supplier_warehousetel, items[0].supplier_warehousefax, items[0].supplier_s_hosoku, items[0].supplier_warehouseaddress_1, items[0].supplier_forwadername, items[0].supplier_forwaderemail, items[0].supplier_forwadertel, items[0].supplier_f_supplement, items[0].supplier_currency, items[0].supplier_tradeterms, items[0].supplier_tradetermstxt, items[0].supplier_paymentterms, items[0].supplier_bankname, items[0].supplier_branch, items[0].supplier_bankaddress, items[0].supplier_swift, items[0].supplier_accountnumber, items[0].supplier_accountname, items[0].supplier_beneficiaryaddress, items[0].supplier_intermediatebank, items[0].supplier_homepageurl, items[0].supplier_idpassword, items[0].supplier_minimumorder, items[0].supplier_discounts, items[0].supplier_productionleadtime, items[0].supplier_remarks, items[0].supplier_supplement_2, ]; template.isNewEntry = false; // 更新用のフラグを設定 } } template.param = param; // スプレッドシートから取得したデータを格納している return template.evaluate(); }
function getDropdownData() { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('国、通貨項目リスト');
// 最終行の特定 const lastRow = sheet.getLastRow();
// A列のデータを取得 const countryDataRange = sheet.getRange(1, 1, lastRow, 1).getValues(); // 1列目のデータを取得 const countryDataValues = countryDataRange.map(function(row) { return row[0]; }).filter(function(value) { return value; });
// B列のデータを取得 const currencyDataRange = sheet.getRange(1, 2, lastRow, 1).getValues(); // 2列目のデータを取得 const currencyDataValues = currencyDataRange.map(function(row) { return row[0]; }).filter(function(value) { return value; });
return { country: countryDataValues, currency: currencyDataValues }; }
//https://script.google.com/a/macros/hq.stylinglife.co.jp/s/AKfycbw_fkmEsoR9i9wNnbpMceBKAyIDtJ4oq3k98w2JODrMHNmVPzxJlV18fcAmwpjEvZM/exec?p1=49xxxxxxxxxxx
//のように、引数を渡すには、/exec?p1=のように書く。
// 詳細ページを開く際に、キーワードを検索してそのキーワードと一致した行を取得する function findByTextFinder(keyword, searchColumn) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧'); const textFinder = sheet.getRange(searchColumn).createTextFinder(keyword).matchEntireCell(true).findNext();
if (textFinder) { let row = textFinder.getRow(); return [{ 'supplier_id': sheet.getRange(row, 1).getValue(), 'supplier_code': sheet.getRange(row, 2).getValue(), 'supplier_companyname': sheet.getRange(row, 3).getValue(), 'supplier_country': sheet.getRange(row, 4).getValue(), 'supplier_officeaddress': sheet.getRange(row, 5).getValue(), 'supplier_contactname': sheet.getRange(row, 6).getValue(), 'supplier_contactmail': sheet.getRange(row, 7).getValue(), 'supplier_contacttel': sheet.getRange(row, 8).getValue(), 'supplier_contactfax': sheet.getRange(row, 9).getValue(), 'supplier_contactperson3': sheet.getRange(row, 10).getValue(), 'supplier_hosoku_2': sheet.getRange(row, 11).getValue(), 'supplier_warehouseaddress': sheet.getRange(row, 12).getValue(), 'supplier_warehousename': sheet.getRange(row, 13).getValue(), 'supplier_warehouseemail': sheet.getRange(row, 14).getValue(), 'supplier_warehousetel': sheet.getRange(row, 15).getValue(), 'supplier_warehousefax': sheet.getRange(row, 16).getValue(), 'supplier_s_hosoku': sheet.getRange(row, 17).getValue(), 'supplier_warehouseaddress_1': sheet.getRange(row, 18).getValue(), 'supplier_forwadername': sheet.getRange(row, 19).getValue(), 'supplier_forwaderemail': sheet.getRange(row, 20).getValue(), 'supplier_forwadertel': sheet.getRange(row, 21).getValue(), 'supplier_f_supplement': sheet.getRange(row, 22).getValue(), 'supplier_currency': sheet.getRange(row, 23).getValue(), 'supplier_tradeterms': sheet.getRange(row, 24).getValue(), 'supplier_tradetermstxt': sheet.getRange(row, 25).getValue(), 'supplier_paymentterms': sheet.getRange(row, 26).getValue(), 'supplier_bankname': sheet.getRange(row, 27).getValue(), 'supplier_branch': sheet.getRange(row, 28).getValue(), 'supplier_bankaddress': sheet.getRange(row, 29).getValue(), 'supplier_swift': sheet.getRange(row, 30).getValue(), 'supplier_accountnumber': sheet.getRange(row, 31).getValue(), 'supplier_accountname': sheet.getRange(row, 32).getValue(), 'supplier_beneficiaryaddress': sheet.getRange(row, 33).getValue(), 'supplier_intermediatebank': sheet.getRange(row, 34).getValue(), 'supplier_homepageurl': sheet.getRange(row, 35).getValue(), 'supplier_idpassword': sheet.getRange(row, 36).getValue(), 'supplier_minimumorder': sheet.getRange(row, 37).getValue(), 'supplier_discounts': sheet.getRange(row, 38).getValue(), 'supplier_productionleadtime': sheet.getRange(row, 39).getValue(), 'supplier_remarks': sheet.getRange(row, 40).getValue(), 'supplier_supplement_2': sheet.getRange(row, 41).getValue() }]; } else { // 該当する行が見つからない場合は空の配列を返す return []; } }
function updateData(formData) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧'); const idRange = sheet.getRange("A:A"); const idValues = idRange.getValues();
Logger.log(formData.country)
if (!formData.code) { return 'CODEが空白です。' }
for (let i = 0; i < idValues.length; i++) { if (idValues[i][0] == formData.id) { let row = i + 1; setRowData(sheet, row, formData); return 'データが更新されました。'; } } return '指定されたIDのデータが見つかりませんでした。'; }
// データの新規登録 function addData(formData) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧');
// A列の最終行のID番号を取得 const lastRow = sheet.getRange('A:A').getValues().filter(String).length; const lastId = sheet.getRange('A' + lastRow).getValue(); const newId = lastId + 1; // 最終行のID番号に+1する
// バリデーション追加 if (!formData.code) { return "CODEが空白です。"; }
// formDataにIDを追加 formData.id = newId;
// 新しい行にデータを追加する setRowData(sheet, lastRow + 1, formData);
return '新しいデータが追加されました。'; }
// スプレッドシートへデータを挿入 function setRowData(sheet, row, formData) { let data = [ formData.id, // A列:ID "'" + formData.code, // B列: CODE (文字列として設定) formData.companyname, // C列: 会社名 formData.country, // D列: 国 formData.officeaddress, // E列: officeaddress formData.contactname, // F列: contactname formData.contactmail, // G列: contactmail formData.contacttel, // H列: contacttel formData.contactfax, // I列: contactfax formData.contactperson3, // J列: 補足1 formData.hosoku_2, // K列: 補足
//Warehouse formData.warehouseaddress, // L列: contactperson3 formData.warehousename, // M列: warehousename formData.warehouseemail, // N列: warehouseemail formData.warehousetel, // O列: warehousetel formData.warehousefax, // P列: warehousefax formData.s_hosoku, // Q列: s_hosoku //Forwarder formData.warehouseaddress_1, // R列: warehouseaddress_1 formData.forwadername, // S列: forwadername formData.forwaderemail, // T列: forwaderemail formData.forwadertel, // U列: 無題4 formData.f_supplement, // V列: f_supplement // 取引条件 formData.currency, // W列: 通貨 formData.tradeterms, // X列: 貿易条件 formData.tradetermstxt, // Y列: tradetermstxt formData.paymentterms, // Z列: 支払条件 // Bank Account formData.bankname, // AA列: 銀行名 formData.branch, // AB列: branch formData.bankaddress, // AC列: bankaddress formData.swift, // AD列: swift formData.accountnumber, // AE列: accountnumber formData.accountname, // AF列: accountname formData.beneficiaryaddress, // AG列: beneficiaryaddress formData.intermediatebank, // AH列: intermediatebank(新規) // その他 formData.homepageurl, // AI列: homepageurl formData.idpassword, // AJ列: idpassword(新規) formData.minimumorder, // AK列: minimumorder formData.discounts, // AL列: discounts formData.productionleadtime, // AM列: productionleadtime formData.remarks, // AN列: 補足1 formData.supplement_2 // AO列: 補足2
];
sheet.getRange(row, 1, 1, data.length).setValues([data]).toString(); }
<!DOCTYPE html>
function doGet(e) { const template = HtmlService.createTemplateFromFile('index'); const dropdownData = getDropdownData(); // ドロップダウンデータの取得
template.countryData = dropdownData.country; // 国のデータをテンプレートに渡す template.currencyData = dropdownData.currency; // 通貨のデータをテンプレートに渡す let param = [];
if (!e.parameter.p2) { template.isNewEntry = true; // 新規登録用フラグ template.param = []; } else { const keyword = e.parameter.p2 ? e.parameter.p2 : e.parameter.p1; const searchColumn = e.parameter.p2 ? "A:A" : "A:A"; const items = findByTextFinder(keyword, searchColumn); if (items.length > 0) { param = [ items[0].supplier_id, items[0].supplier_code, items[0].supplier_companyname, items[0].supplier_country, items[0].supplier_officeaddress, items[0].supplier_contactname, items[0].supplier_contactmail, items[0].supplier_contacttel, items[0].supplier_contactfax, items[0].supplier_contactperson3, items[0].supplier_hosoku_2, items[0].supplier_warehouseaddress, items[0].supplier_warehousename, items[0].supplier_warehouseemail, items[0].supplier_warehousetel, items[0].supplier_warehousefax, items[0].supplier_s_hosoku, items[0].supplier_warehouseaddress_1, items[0].supplier_forwadername,
items[0].supplier_forwaderemail, items[0].supplier_forwadertel, items[0].supplier_f_supplement, items[0].supplier_currency, items[0].supplier_tradeterms, items[0].supplier_tradetermstxt, items[0].supplier_paymentterms, items[0].supplier_bankname, items[0].supplier_branch, items[0].supplier_bankaddress, items[0].supplier_swift, items[0].supplier_accountnumber, items[0].supplier_accountname, items[0].supplier_beneficiaryaddress, items[0].supplier_intermediatebank, items[0].supplier_homepageurl, items[0].supplier_idpassword, items[0].supplier_minimumorder, items[0].supplier_discounts, items[0].supplier_productionleadtime, items[0].supplier_remarks, items[0].supplier_supplement_2, ]; template.isNewEntry = false; // 更新用のフラグを設定 } } template.param = param; // スプレッドシートから取得したデータを格納している return template.evaluate(); }
function getDropdownData() { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('国、通貨項目リスト');
// 最終行の特定 const lastRow = sheet.getLastRow();
// A列のデータを取得 const countryDataRange = sheet.getRange(1, 1, lastRow, 1).getValues(); // 1列目のデータを取得 const countryDataValues = countryDataRange.map(function(row) { return row[0]; }).filter(function(value) { return value; });
// B列のデータを取得 const currencyDataRange = sheet.getRange(1, 2, lastRow, 1).getValues(); // 2列目のデータを取得 const currencyDataValues = currencyDataRange.map(function(row) { return row[0]; }).filter(function(value) { return value; });
return { country: countryDataValues, currency: currencyDataValues }; }
//https://script.google.com/a/macros/hq.stylinglife.co.jp/s/AKfycbw_fkmEsoR9i9wNnbpMceBKAyIDtJ4oq3k98w2JODrMHNmVPzxJlV18fcAmwpjEvZM/exec?p1=49xxxxxxxxxxx
//のように、引数を渡すには、/exec?p1=のように書く。
// 詳細ページを開く際に、キーワードを検索してそのキーワードと一致した行を取得する function findByTextFinder(keyword, searchColumn) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧'); const textFinder = sheet.getRange(searchColumn).createTextFinder(keyword).matchEntireCell(true).findNext();
if (textFinder) { let row = textFinder.getRow(); return [{ 'supplier_id': sheet.getRange(row, 1).getValue(), 'supplier_code': sheet.getRange(row, 2).getValue(), 'supplier_companyname': sheet.getRange(row, 3).getValue(), 'supplier_country': sheet.getRange(row, 4).getValue(), 'supplier_officeaddress': sheet.getRange(row, 5).getValue(), 'supplier_contactname': sheet.getRange(row, 6).getValue(), 'supplier_contactmail': sheet.getRange(row, 7).getValue(), 'supplier_contacttel': sheet.getRange(row, 8).getValue(), 'supplier_contactfax': sheet.getRange(row, 9).getValue(), 'supplier_contactperson3': sheet.getRange(row, 10).getValue(), 'supplier_hosoku_2': sheet.getRange(row, 11).getValue(), 'supplier_warehouseaddress': sheet.getRange(row, 12).getValue(), 'supplier_warehousename': sheet.getRange(row, 13).getValue(), 'supplier_warehouseemail': sheet.getRange(row, 14).getValue(), 'supplier_warehousetel': sheet.getRange(row, 15).getValue(), 'supplier_warehousefax': sheet.getRange(row, 16).getValue(), 'supplier_s_hosoku': sheet.getRange(row, 17).getValue(), 'supplier_warehouseaddress_1': sheet.getRange(row, 18).getValue(), 'supplier_forwadername': sheet.getRange(row, 19).getValue(), 'supplier_forwaderemail': sheet.getRange(row, 20).getValue(), 'supplier_forwadertel': sheet.getRange(row, 21).getValue(), 'supplier_f_supplement': sheet.getRange(row, 22).getValue(), 'supplier_currency': sheet.getRange(row, 23).getValue(), 'supplier_tradeterms': sheet.getRange(row, 24).getValue(), 'supplier_tradetermstxt': sheet.getRange(row, 25).getValue(), 'supplier_paymentterms': sheet.getRange(row, 26).getValue(), 'supplier_bankname': sheet.getRange(row, 27).getValue(), 'supplier_branch': sheet.getRange(row, 28).getValue(), 'supplier_bankaddress': sheet.getRange(row, 29).getValue(), 'supplier_swift': sheet.getRange(row, 30).getValue(), 'supplier_accountnumber': sheet.getRange(row, 31).getValue(), 'supplier_accountname': sheet.getRange(row, 32).getValue(), 'supplier_beneficiaryaddress': sheet.getRange(row, 33).getValue(), 'supplier_intermediatebank': sheet.getRange(row, 34).getValue(), 'supplier_homepageurl': sheet.getRange(row, 35).getValue(), 'supplier_idpassword': sheet.getRange(row, 36).getValue(), 'supplier_minimumorder': sheet.getRange(row, 37).getValue(), 'supplier_discounts': sheet.getRange(row, 38).getValue(), 'supplier_productionleadtime': sheet.getRange(row, 39).getValue(), 'supplier_remarks': sheet.getRange(row, 40).getValue(), 'supplier_supplement_2': sheet.getRange(row, 41).getValue() }]; } else { // 該当する行が見つからない場合は空の配列を返す return []; } }
function updateData(formData) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧'); const idRange = sheet.getRange("A:A"); const idValues = idRange.getValues();
Logger.log(formData.country)
if (!formData.code) { return 'CODEが空白です。' }
for (let i = 0; i < idValues.length; i++) { if (idValues[i][0] == formData.id) { let row = i + 1; setRowData(sheet, row, formData); return 'データが更新されました。'; } } return '指定されたIDのデータが見つかりませんでした。'; }
// データの新規登録 function addData(formData) { const id = "17KMA-kZ7PRLiHYR7_iOPwM2FVpxJ93w-YM0YZAIJuuk"; const sheet = SpreadsheetApp.openById(id).getSheetByName('海外仕入先一覧');
// A列の最終行のID番号を取得 const lastRow = sheet.getRange('A:A').getValues().filter(String).length; const lastId = sheet.getRange('A' + lastRow).getValue(); const newId = lastId + 1; // 最終行のID番号に+1する
// バリデーション追加 if (!formData.code) { return "CODEが空白です。"; }
// formDataにIDを追加 formData.id = newId;
// 新しい行にデータを追加する setRowData(sheet, lastRow + 1, formData);
return '新しいデータが追加されました。'; }
// スプレッドシートへデータを挿入 function setRowData(sheet, row, formData) { let data = [ formData.id, // A列:ID "'" + formData.code, // B列: CODE (文字列として設定) formData.companyname, // C列: 会社名 formData.country, // D列: 国 formData.officeaddress, // E列: officeaddress formData.contactname, // F列: contactname formData.contactmail, // G列: contactmail formData.contacttel, // H列: contacttel formData.contactfax, // I列: contactfax formData.contactperson3, // J列: 補足1 formData.hosoku_2, // K列: 補足
];
sheet.getRange(row, 1, 1, data.length).setValues([data]).toString(); }