combine_html_file

đọc dữ liệu html file trên Drive ---
 avatar
unknown
javascript
3 years ago
4.0 kB
3
Indexable
let spreadsheetId = "";  // Please set the Spreadsheet ID for putting the values.
let sheetName = "DataRead"; // dùng để chuyển dữ liệu về
let sdheetMasster = "getSheetId_Html_in_Folder"; // 

// hàm dùng để chuyển tiếng việt thành dạng không dấu -- -- - 
function removeVietnameseAccents(str) {
  const AccentsMap = [
    'aàảãáạăằẳẵắặâầẩẫấậ',
    'AÀẢÃÁẠĂẰẲẴẮẶÂẦẨẪẤẬ',
    'dđ',
    'DĐ',
    'eèẻẽéẹêềểễếệ',
    'EÈẺẼÉẸÊỀỂỄẾỆ',
    'iìỉĩíị',
    'IÌỈĨÍỊ',
    'oòỏõóọôồổỗốộơờởỡớợ',
    'OÒỎÕÓỌÔỒỔỖỐỘƠỜỞỠỚỢ',
    'uùủũúụưừửữứự',
    'UÙỦŨÚỤƯỪỬỮỨỰ',
    'yỳỷỹýỵ',
    'YỲỶỸÝỴ',
  ];
  for (const accent of AccentsMap) {
    const re = new RegExp(`[${accent.substr(1)}]`, 'g');
    const char = accent[0];
    str = str.replace(re, char);
  }
  return str;
}


// Đọc thông tin các file trong folder --- - 
async function getFileOnFolder(id) {

  const idFolder = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sdheetMasster).getRange('B1').getDisplayValue();

  let idSheetOld = await returnDataforSheet(spreadsheetId, sdheetMasster, 'A3:D')
  let idA = idSheetOld.map(e => e[2]);

  console.log(idA)

  const files = DriveApp.getFolderById(idFolder).getFiles();

  while (files.hasNext()) {
    const file = files.next();

    const key = idA.filter(e => e == file.getId()).length

    console.log(key)
    if (key == 0) {
      if (
        file.getMimeType() == 'text/html'
//kiểm tra tên file và điều kiện ----
        && removeVietnameseAccents(file.getName()).toUpperCase().includes(removeVietnameseAccents('RPM_return').toUpperCase())
      ) {

        SpreadsheetApp.openById(spreadsheetId).getSheetByName(sdheetMasster).appendRow([
          file.getLastUpdated(),
          file.getName(),
          file.getId(),
          file.getMimeType(),
        ])
        await readContentOfHtmlByAppsScript(spreadsheetId, sheetName, file.getId())
      }
    }
  }
  // await checkLastData()
}
// Đọc file html xuất từ SAP xuống và update vào sheet cho trước
async function readContentOfHtmlByAppsScript(spreadsheetId, sheetName, fileId) {

  const html = DriveApp.getFileById(fileId).getBlob().getDataAsString();
  let values = html.match(/<table[\w\s\S]+?<\/table>/gi);

  var ss = SpreadsheetApp.openById(spreadsheetId);

  var sheet = ss.getSheetByName(sheetName);

  var sheetId = sheet.getSheetId();

  let col = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName).getLastColumn()
  let rowIndex = await myGetLastRow(spreadsheetId, sheetName, col);

  values.forEach(function (e) {
    let resource = { requests: [{ pasteData: { html: true, data: e, coordinate: { sheetId: sheetId, rowIndex: rowIndex } } }] };
    Sheets.Spreadsheets.batchUpdate(resource, spreadsheetId);
    rowIndex = sheet.getLastRow();
    // console.log(JSON.stringify(resource))
  })
}

// Đọc dòng dữ liệu cuối cùng = tương đương với getLastRow()

async function myGetLastRow(spreadsheet_id, spreadsheet_name, column) {
  const sheet = SpreadsheetApp.openById(spreadsheet_id).getSheetByName(spreadsheet_name);

  let data = sheet.getRange(1, column, sheet.getLastRow()).getValues();

  while (typeof data[data.length - 1] !== 'undefined'
    && data[data.length - 1][0].length === 0) {
    data.pop();
  }
  return data.length;
}


//  Đọc dữ liệu bảng tính ----- 
async function returnDataforSheet(sheetid, sheetName, range) {
  const sheet = SpreadsheetApp.openById(sheetid).getSheetByName(sheetName);
  const rowSheet = range + sheet.getLastRow();
  const data = sheet.getRange(rowSheet).getDisplayValues();
  return data;
}