Câu hỏi:

viết code app script lấy dữ liệu cột b và c gồm nhiều hàng tạo file mới từ file mẫu giữ nguên định dạng file dán dữ liệu dòng đầu vào ô b6 c7 copy a6 đến d10 dán vào a11 dán dữ liệu dòng hai vào ô b12 c13 lặp lại đến khi dữ liệu rỗng lưu file ở đường dẫn mở file


Chào người anh em. Qua sẽ giúp hướng dẫn thực hiện yêu cầu này bằng Google Apps Script.

Trước tiên, cần mở Google Sheets, vào Extensions -> Apps Script để tạo và chỉnh sửa mã.

Để thực hiện yêu cầu của người anh em, qua sẽ viết mã theo các bước sau:

  1. Lấy dữ liệu từ cột B và C.
  2. Tạo bản sao của một file mẫu và giữ nguyên định dạng.
  3. Dán dữ liệu lần lượt vào các ô B6, C7, sao chép vùng A6:D10 và dán vào A11.
  4. Dán dữ liệu khác vào các ô tương ứng và lặp lại đến khi hết dữ liệu.
  5. Lưu file và mở file.

Dưới đây là mã mẫu thực hiện yêu cầu này:

function main() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // Thay Sheet1 bằng tên sheet của người anh em
  const templateFileId = 'TEMPLATE_FILE_ID'; // Thay TEMPLATE_FILE_ID bằng ID file mẫu của người anh em
  const folderId = 'DESTINATION_FOLDER_ID'; // Thay DESTINATION_FOLDER_ID bằng ID thư mục lưu trữ
  const folder = DriveApp.getFolderById(folderId);

  // Lấy tất cả các giá trị từ cột B và C
  const dataRange = sheet.getRange('B2:C').getValues();

  // Tạo bản sao từ file mẫu
  const templateFile = DriveApp.getFileById(templateFileId);
  const newFile = templateFile.makeCopy(`New File ${new Date().toISOString()}`, folder);

  const newSpreadsheet = SpreadsheetApp.open(newFile);
  const newSheet = newSpreadsheet.getSheetByName('Sheet1'); // Ensure the target sheet name matches

  // Vị trí ban đầu để dán dữ liệu
  let startRow = 6;

  dataRange.forEach((row, index) => {
    if (row[0] === '' && row[1] === '') return; // Nếu dữ liệu rỗng thì bỏ qua

    // Dán dòng dữ liệu
    newSheet.getRange(startRow, 2).setValue(row[0]); // B
    newSheet.getRange(startRow + 1, 3).setValue(row[1]); // C

    // Copy vùng A6:D10 và dán vào A11 + (index * 6)
    const copyRange = newSheet.getRange('A6:D10');
    const pasteRange = newSheet.getRange(11 + (index * 6), 1);
    copyRange.copyTo(pasteRange);

    // Cập nhật vị trí startRow cho lần nhập tiếp theo
    startRow += 6;
  });

  // Mở file mới
  DriveApp.getFileById(newSpreadsheet.getId()).setTrashed(false); // Đảm bảo file không bị deleted
  SpreadsheetApp.openById(newSpreadsheet.getId());
}

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('Custom Menu')
    .addItem('Run Script', 'main')
    .addToUi();
}

Hãy chú ý thay thế TEMPLATE_FILE_IDDESTINATION_FOLDER_ID bằng ID tương ứng của file mẫu và thư mục lưu trữ.

Người anh em có thể ghé thăm trituenhantao.io để tìm hiểu thêm về vô vàn thông tin bổ ích khác.

Chúc người anh em thành công!


Nếu như câu trả lời chưa thuyết phục, hãy đăng câu hỏi của bạn kèm theo URL hiện tại lên Cộng Đồng Trí Tuệ Nhân Tạo để mọi người cùng giải đáp và bàn luận.
Lưu ý: Để tránh loãng nội dung, các câu hỏi chưa được hỏi với AI sẽ không được duyệt trên nhóm.
Trang chủ | Hỏi tiếp | Xem lịch sử