kiến thức Office Scripts, một giải pháp tự động hóa khác bên cạnh VBA trong Excel

NguyenDang95

Senior Member
Giới thiệu sơ lược về Office Scripts, giải pháp tự động hóa các thao tác trên Excel:

Ra mắt từ năm 2019, Office Scripts là sản phẩm của Microsoft được viết bằng ngôn ngữ TypeScripts có chức năng tương tự như VBA nhưng có thể chạy trên nền web, điều mà VBA không thể làm được. Kết hợp với Power Automate, người dùng có thể tạo ra những macro phục vụ nhiều mục đích khác nhau cho công việc.
Để viết và sử dụng Office Scripts trên Excel, người dùng cần có:
  • Excel on the web, Excel for Windows and Mac
  • OneDrive for Business
Đã đăng ký một trong những phiên bản Microsoft 365 dưới đây:
  • Microsoft 365 Business
  • Microsoft 365 Business Premium
  • Microsoft 365 ProPlus
  • Microsoft 365 ProPlus for Devices
  • Microsoft 365 Enterprise E3
  • Microsoft 365 Enterprise E5
  • Microsoft 365 A3
  • Microsoft 365 A5
Lưu ý: Mặc dù tên gọi là Office Scripts, tuy vậy nó hiện mới chỉ hỗ trợ Excel. Hi vọng trong tương lai Microsoft sẽ hỗ trợ nhiều ứng dụng khác trong Office (Word, Outlook, PowerPoint, v.v). Ngoài ra, cũng không nên nhầm lẫn với Office Add-ins JavaScript API, một giải pháp lập trình add-in Office dành cho lập trình viên chuyên nghiệp.

Một số ví dụ về Office Scripts:
Để soạn thảo và chạy Office Scripts trong Excel, người dùng chọn tab Automate trên thanh ribbon của Excel. Giao diện thông thường như sau:

1671284685439.png


Xóa những sheet trống, không có nội dung:
JavaScript:
function main(workbook: ExcelScript.Workbook)
{
  let worksheets = workbook.getWorksheets();
  worksheets.forEach(worksheet => {
    let wsUsedRange = worksheet.getUsedRange();
    if (!wsUsedRange)
    {
      worksheet.delete();
    }
  });
}

Đánh dấu những ô có giá trị trùng nhau:

JavaScript:
function main(workbook: ExcelScript.Workbook)
{
  let selectedRange = workbook.getSelectedRange();
  let rowCount = selectedRange.getRowCount();
  let columnCount = selectedRange.getColumnCount();
  let rangeValues = selectedRange.getValues();
  for (let i = 0; i < rowCount; i++)
  {
    for (let j = 0; j < columnCount; j++)
    {
      let result = countIf(selectedRange, rangeValues[i][j])
      if (result > 1 )
      {
        let cell = selectedRange.getCell(i,j);
        cell.getFormat().getFill().setColor("green");
      }
    }
  }

  function countIf(range: ExcelScript.Range, criteria: ExcelScript.RangeValue): number
  {
    let duplicatesCount = 0;
    let rowCount = range.getRowCount();
    let columnCount = range.getColumnCount();
    let rangeData = range.getValues();
    for (let i = 0; i < rowCount; i++)
    {
      for (let j = 0; j < columnCount; j++)
      {
        let cellValue = rangeData[i][j];
        if (cellValue === criteria)
        {
          duplicatesCount = duplicatesCount + 1;
        }
      }
    }
    return duplicatesCount;
  }
}

Dùng Google Translate:

JavaScript:
async function main(workbook: ExcelScript.Workbook) {
  let worksheet = workbook.getActiveWorksheet();
  let sourceLang = worksheet.getRange("B2").getValue();
  let destinationLang = worksheet.getRange("C2").getValue();
  let textToTranslate = worksheet.getRange("B3").getValue();
  let fetchResult = await fetch("https://translate.googleapis.com/translate_a/single?client=gtx&sl=" + sourceLang + "&tl=" + destinationLang + "&dt=t&q=" + encodeURI(textToTranslate.toString()))
  if (fetchResult.ok)
  {
    let response = await fetchResult.text();
    worksheet.getRange("C3").setValue((JSON.parse(response)[0][0][0]));
  }
}

1671285191465.png


Cuối cùng, chuyển những ô chứa công thức thành giá trị đã tính toán:

JavaScript:
function main(workbook: ExcelScript.Workbook)
{
  let selectedRange = workbook.getSelectedRange();
  let selectedRangeValues = selectedRange.getValues();
  let rowCount: number;
  let columnCount: number;
  let row: number;
  let column: number;
  rowCount = selectedRange.getRowCount();
  columnCount = selectedRange.getColumnCount();
  for (row = 0; row < rowCount; row++)
  {
    for (column = 0; column < columnCount; column++)
    {
      let cell = selectedRange.getCell(row, column);
      if (cell.getFormula)
      {
        cell.setValue(selectedRangeValues[row][column]);
      }
    }
  }
}

Hạn chế:
  • Trong một thời điểm chỉ có thể tương tác với một workbook
  • Tính năng hỗ trợ còn thiếu nhiều và hạn chế so với VBA
Tìm hiểu thêm:
Office Scripts documentation
TypeScript restrictions in Office Scripts
Platform limits and requirements with Office Scripts
Differences between Office Scripts and VBA macros
When to use Power Query or Office Scripts
Fundamentals for Office Scripts in Excel
Best practices in Office Scripts
Improve the performance of your Office Scripts
Troubleshoot Office Scripts
Stack Overflow
 
Last edited:
Mình không có phiên bản excel 365 business thì có cách nào viết xong xuất ra sử dụng cho file excel thường không ?
 
Mình không có phiên bản excel 365 business thì có cách nào viết xong xuất ra sử dụng cho file excel thường không ?
Hiện tại Office Scripts chỉ hỗ trợ cho những tài khoản Microsoft 365 doanh nghiệp hoặc trường học.
Khi dùng tài khoản thường để truy cập vào tab Automate thì sẽ báo lỗi như sau:

1671361910584.png
 
Tương lai sẽ chuyển hết VBA sang thôi. VBA cũ quá rồi.

Cái WPF cũng chuyển thành community driven rồi. Tiếc cho một tượng đài.
Mình nghĩ Microsoft định hướng Office Scripts (TypeScript) là ngôn ngữ tự động hóa chạy trên nền web, nếu xét về tính năng và hạn chế so với VBA thì Office Scripts còn thiếu sót quá nhiều, còn VBA vẫn đóng vai trò chủ đạo trên nền desktop, chỉ tiếc là VBA sẽ không bao giờ được cập nhật nữa.
 
Mình nghĩ Microsoft định hướng Office Scripts (TypeScript) là ngôn ngữ tự động hóa chạy trên nền web, nếu xét về tính năng và hạn chế so với VBA thì Office Scripts còn thiếu sót quá nhiều, còn VBA vẫn đóng vai trò chủ đạo trên nền desktop, chỉ tiếc là VBA sẽ không bao giờ được cập nhật nữa.
Xu thế rồi mà. Thôi cũng chấp nhận vậy
 
có nghia chỉ xài dc code trên apps có automate còn lại ko xài dc. Đúng không ?
Thím có thể gõ code Office Scripts trên Excel bản Desktop (Microsoft 365) lẫn Excel bản web đều được nhé.
Người quản trị (tức là admin đang quản lý các tài khoản Microsoft 365 của tổ chức) phải kích hoạt Office Scripts thì thành viên mới sử dụng được.
 
cũ nhưng nó mạnh. đám script js phò phạch ra cái gì đâu. thách a port 1 cái addin sang được ấy
Tính ra nếu ngày xưa Microsoft mạnh dạn viết lại, chuyển từ VBA sang nền tảng .NET thì bây giờ người dùng sẽ được hưởng lợi hơn rất nhiều, lúc đó có thể tùy viết macro bằng VB.NET, C# hay bất cứ ngôn ngữ .NET nào khác.
Với tình hình này VBA sẽ còn sống rất lâu, nhìn cái IDE với giao diện từ thời Windows 95 mà thấy nản thật.
 
Back
Top