Hướng dẫn

Kết Nối Google Sheets Với ChatGPT/Gemini AI - Tự Động Hóa Thông Minh 2026

Tuân HoangTuân Hoang
27 tháng 2, 2026
Cập nhật: 25 tháng 3, 2026
28 phút đọc
Kết Nối Google Sheets Với ChatGPT/Gemini AI - Tự Động Hóa Thông Minh 2026

Tại Sao Nên Kết Hợp AI Với Google Sheets Trong 2026?

Năm 2026, AI không còn là xu hướng mà đã trở thành công cụ thiết yếu trong mọi quy trình làm việc. Nếu bạn đang dùng Google Sheets hàng ngày để quản lý dữ liệu, viết nội dung, phân tích báo cáo... thì việc kết hợp AI sẽ giúp bạn tiết kiệm 10-20 giờ mỗi tuần cho các tác vụ lặp đi lặp lại.

AI + Google Sheets = Siêu năng lực cho dân văn phòng

Hãy tưởng tượng bạn có thể:

  • Viết mô tả 500 sản phẩm chỉ với 1 công thức kéo xuống - thay vì ngồi gõ 3 ngày
  • Phân loại 10.000 feedback khách hàng thành Tích cực/Tiêu cực/Trung lập trong 5 phút
  • Dịch toàn bộ catalog sang 5 ngôn ngữ mà không cần thuê dịch giả
  • Tóm tắt 200 báo cáo dài thành bullet points chỉ trong vài phút
  • Tạo email marketing cá nhân hóa cho từng phân khúc khách hàng tự động

Thống kê thực tế 2026:

  • 78% doanh nghiệp SME tại Việt Nam đã tích hợp AI vào quy trình làm việc (theo VnExpress)
  • Nhân viên sử dụng AI trên spreadsheet tiết kiệm trung bình 12 giờ/tuần cho data entry và content
  • Chi phí API AI giảm 90% so với 2023 - giờ chỉ từ 0.15$/1 triệu token (GPT-4o-mini)
  • Google Gemini cung cấp free tier 60 request/phút - đủ cho hầu hết nhu cầu cá nhân

3 cách kết nối AI với Google Sheets

Cách Độ khó Chi phí Phù hợp cho
OpenAI (ChatGPT) qua Apps Script Trung bình Từ $5 credit Dev, power user
Google Gemini qua Apps Script Trung bình Miễn phí (free tier) Ai cũng dùng được
GPT for Sheets add-on Dễ (no code) Free/Pro từ $9/tháng Non-tech, marketer

Bài viết này sẽ hướng dẫn chi tiết cả 3 cách từ đơn giản đến nâng cao, kèm code mẫu copy-paste được ngay. Hãy chọn cách phù hợp nhất với bạn!

Cách 1: Kết Nối OpenAI (ChatGPT) Qua Apps Script

Đây là cách linh hoạt và mạnh mẽ nhất - bạn có toàn quyền kiểm soát prompt, model, và cách xử lý dữ liệu. Kết quả: tạo được custom function =AI("câu hỏi") ngay trong Google Sheets.

Bước 1: Tạo API Key trên OpenAI

  1. 1. Truy cập platform.openai.com → Đăng nhập hoặc tạo tài khoản
  2. 2. Vào menu API Keys (Settings → API Keys)
  3. 3. Click "Create new secret key" → Đặt tên (VD: "Google Sheets AI")
  4. 4. Copy API key ngay lập tức (chỉ hiện 1 lần!) → Lưu vào nơi an toàn
  5. 5. Vào Billing → Nạp tối thiểu $5 (đủ dùng hàng tháng cho 10.000+ request)

Quan trọng - Bảo mật API Key:

Không bao giờ chia sẻ API key. Nếu lỡ lộ, vào Settings → API Keys → Revoke ngay. Đặt spending limit trong Billing để tránh chi phí phát sinh ngoài kiểm soát.

Bước 2: Tạo Apps Script kết nối ChatGPT

Mở Google Sheets → Extensions → Apps Script → Xóa code mặc định và dán đoạn script sau:

// ============================================
// OPENAI (ChatGPT) INTEGRATION FOR GOOGLE SHEETS
// Model: gpt-4o-mini (nhanh, rẻ, chất lượng tốt)
// ============================================

const OPENAI_API_KEY = 'sk-xxxxxxxxxxxxxxxxxxxxxxxx'; // Thay bằng API key của bạn
const OPENAI_MODEL = 'gpt-4o-mini'; // Hoặc 'gpt-4o' cho chất lượng cao hơn

/**
 * Gọi ChatGPT API từ Google Sheets
 * Sử dụng: =AI("viết mô tả sản phẩm cho áo thun nam")
 *
 * @param {string} prompt - Câu hỏi hoặc yêu cầu gửi cho AI
 * @param {string} context - (Tùy chọn) Ngữ cảnh bổ sung
 * @param {number} maxTokens - (Tùy chọn) Giới hạn độ dài output (mặc định 500)
 * @return {string} Câu trả lời từ ChatGPT
 * @customfunction
 */
function AI(prompt, context, maxTokens) {
  if (!prompt) return 'Vui lòng nhập prompt';

  maxTokens = maxTokens || 500;

  const systemMessage = context
    ? 'Bạn là trợ lý AI hữu ích. Ngữ cảnh: ' + context
    : 'Bạn là trợ lý AI hữu ích. Trả lời ngắn gọn, chính xác bằng tiếng Việt.';

  const payload = {
    model: OPENAI_MODEL,
    messages: [
      { role: 'system', content: systemMessage },
      { role: 'user', content: prompt }
    ],
    max_tokens: maxTokens,
    temperature: 0.7
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: {
      'Authorization': 'Bearer ' + OPENAI_API_KEY
    },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };

  try {
    const response = UrlFetchApp.fetch(
      'https://api.openai.com/v1/chat/completions',
      options
    );
    const json = JSON.parse(response.getContentText());

    if (json.error) {
      return 'Lỗi: ' + json.error.message;
    }

    return json.choices[0].message.content.trim();
  } catch (error) {
    return 'Lỗi kết nối: ' + error.toString();
  }
}

/**
 * Viết mô tả sản phẩm SEO-friendly
 * Sử dụng: =AI_PRODUCT_DESC(A2, B2, C2)
 *
 * @param {string} productName - Tên sản phẩm
 * @param {string} category - Danh mục
 * @param {string} features - Đặc điểm nổi bật
 * @return {string} Mô tả sản phẩm 100-150 từ
 * @customfunction
 */
function AI_PRODUCT_DESC(productName, category, features) {
  if (!productName) return 'Nhập tên sản phẩm';

  const prompt = 'Viết mô tả sản phẩm SEO-friendly (100-150 từ) cho: '
    + productName
    + (category ? '. Danh mục: ' + category : '')
    + (features ? '. Đặc điểm: ' + features : '')
    + '. Giọng văn chuyên nghiệp, hấp dẫn, có CTA.';

  return AI(prompt, 'Bạn là copywriter chuyên viết mô tả sản phẩm e-commerce.');
}

/**
 * Phân loại sentiment (cảm xúc) của text
 * Sử dụng: =AI_SENTIMENT(A2)
 *
 * @param {string} text - Text cần phân tích
 * @return {string} "Tích cực" | "Tiêu cực" | "Trung lập"
 * @customfunction
 */
function AI_SENTIMENT(text) {
  if (!text) return '';

  const prompt = 'Phân loại cảm xúc của đoạn text sau thành đúng 1 trong 3: '
    + '"Tích cực", "Tiêu cực", hoặc "Trung lập". '
    + 'CHỈ trả lời 1 từ duy nhất, không giải thích. Text: "' + text + '"';

  return AI(prompt, null, 10);
}

/**
 * Tóm tắt nội dung dài thành bullet points
 * Sử dụng: =AI_SUMMARIZE(A2, 3)
 *
 * @param {string} text - Nội dung cần tóm tắt
 * @param {number} points - Số bullet points (mặc định 3)
 * @return {string} Tóm tắt dạng bullet points
 * @customfunction
 */
function AI_SUMMARIZE(text, points) {
  if (!text) return '';
  points = points || 3;

  const prompt = 'Tóm tắt nội dung sau thành ' + points
    + ' bullet points ngắn gọn (mỗi point 1 dòng, bắt đầu bằng "- "):\n\n' + text;

  return AI(prompt, null, 300);
}

Bước 3: Sử dụng custom function trong Sheets

Sau khi lưu script (Ctrl+S), quay lại Google Sheets và sử dụng các hàm mới:

Ô A (Input) Ô B (Công thức) Kết quả
Áo thun nam cotton =AI_PRODUCT_DESC(A2,"Thời trang","cotton 100%") Mô tả 100-150 từ cho sản phẩm
Sản phẩm tốt, giao nhanh =AI_SENTIMENT(A3) Tích cực
[Báo cáo dài 500 từ] =AI_SUMMARIZE(A4, 5) 5 bullet points tóm tắt
(tự nhập prompt) =AI("viết slogan cho quán cafe") Slogan sáng tạo do AI viết

Mẹo khi dùng hàng loạt:

  • Không kéo công thức cho 500 dòng cùng lúc - API sẽ bị rate limit. Kéo 20-30 dòng một lần, đợi xong rồi kéo tiếp
  • Kết quả AI sẽ cache tự động trong ô - không tốn API khi mở lại sheet
  • Nếu muốn refresh kết quả, thêm tham số giả: =AI(A2, , , NOW())
  • Dùng gpt-4o-mini cho tác vụ đơn giản (rẻ 10x), gpt-4o cho nội dung sáng tạo quan trọng

Ví dụ thực tế: Viết mô tả 100 sản phẩm tự động

Giả sử bạn có danh sách 100 sản phẩm cần viết mô tả cho website e-commerce:

Setup trong Google Sheets:

Cột A: Tên SP Cột B: Danh mục Cột C: Đặc điểm Cột D: Mô tả (AI)
Áo thun nam Polo Thời trang nam Cotton 100%, form slim fit =AI_PRODUCT_DESC(A2,B2,C2)
Váy liền công sở Thời trang nữ Vải chiffon, dáng A =AI_PRODUCT_DESC(A3,B3,C3)
Giày sneaker unisex Giày dép Đế cao su, thoáng khí =AI_PRODUCT_DESC(A4,B4,C4)

Kéo công thức cột D xuống 100 dòng → AI tự viết mô tả cho từng sản phẩm. Thời gian: ~10 phút (thay vì 2-3 ngày viết tay).

Cách 2: Kết Nối Google Gemini Qua Apps Script

Google Gemini là lựa chọn miễn phí tuyệt vời nếu bạn không muốn tốn tiền API. Free tier cho phép 60 request/phút1.500 request/ngày - quá đủ cho hầu hết nhu cầu cá nhân và doanh nghiệp nhỏ.

Bước 1: Tạo API Key Gemini (miễn phí)

  1. 1. Truy cập aistudio.google.com → Đăng nhập bằng tài khoản Google
  2. 2. Click "Get API Key" ở thanh bên trái
  3. 3. Click "Create API Key" → Chọn project hoặc tạo mới
  4. 4. Copy API key → Lưu lại (có thể xem lại sau trên Google AI Studio)

Ưu điểm Gemini API Free Tier (2026):

  • 60 request/phút - Đủ để xử lý batch lớn
  • 1.500 request/ngày - Thoải mái cho use case hàng ngày
  • Không cần thẻ tín dụng - Chỉ cần tài khoản Google
  • Gemini 2.0 Flash - Model mới nhất, nhanh và thông minh
  • Hỗ trợ tiếng Việt tốt - Phù hợp với người dùng VN

Bước 2: Tạo Apps Script gọi Gemini API

Mở Google Sheets → Extensions → Apps Script → Dán code sau:

// ============================================
// GOOGLE GEMINI AI INTEGRATION FOR GOOGLE SHEETS
// Model: gemini-2.0-flash (miễn phí, nhanh)
// ============================================

const GEMINI_API_KEY = 'AIzaSyxxxxxxxxxxxxxxxxxxxxxxxxx'; // Thay bằng API key của bạn
const GEMINI_MODEL = 'gemini-2.0-flash'; // Model mới nhất 2026

/**
 * Gọi Google Gemini AI từ Google Sheets
 * Sử dụng: =GEMINI("phân tích xu hướng thị trường 2026")
 *
 * @param {string} prompt - Câu hỏi hoặc yêu cầu gửi cho Gemini
 * @param {number} maxTokens - (Tùy chọn) Giới hạn output (mặc định 500)
 * @return {string} Câu trả lời từ Gemini
 * @customfunction
 */
function GEMINI(prompt, maxTokens) {
  if (!prompt) return 'Vui lòng nhập prompt';

  maxTokens = maxTokens || 500;

  const url = 'https://generativelanguage.googleapis.com/v1beta/models/'
    + GEMINI_MODEL + ':generateContent?key=' + GEMINI_API_KEY;

  const payload = {
    contents: [{
      parts: [{
        text: prompt + '\n\nTrả lời bằng tiếng Việt, ngắn gọn và chính xác.'
      }]
    }],
    generationConfig: {
      maxOutputTokens: maxTokens,
      temperature: 0.7,
      topP: 0.8,
      topK: 40
    }
  };

  const options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  };

  try {
    const response = UrlFetchApp.fetch(url, options);
    const json = JSON.parse(response.getContentText());

    if (json.error) {
      return 'Lỗi: ' + json.error.message;
    }

    if (!json.candidates || json.candidates.length === 0) {
      return 'Không có kết quả (có thể bị safety filter)';
    }

    return json.candidates[0].content.parts[0].text.trim();
  } catch (error) {
    return 'Lỗi kết nối: ' + error.toString();
  }
}

/**
 * Phân tích sentiment bằng Gemini (miễn phí)
 * =GEMINI_SENTIMENT("sản phẩm rất tệ, giao hàng chậm")
 *
 * @param {string} text - Text cần phân tích
 * @return {string} "Tích cực" | "Tiêu cực" | "Trung lập"
 * @customfunction
 */
function GEMINI_SENTIMENT(text) {
  if (!text) return '';

  const prompt = 'Phân loại cảm xúc của đoạn text sau. '
    + 'CHỈ trả lời đúng 1 trong 3 từ: "Tích cực", "Tiêu cực", "Trung lập". '
    + 'Không giải thích thêm.\n\nText: "' + text + '"';

  return GEMINI(prompt, 10);
}

/**
 * Dịch văn bản bằng Gemini (miễn phí)
 * =GEMINI_TRANSLATE("Xin chào", "English")
 *
 * @param {string} text - Văn bản cần dịch
 * @param {string} targetLang - Ngôn ngữ đích (English, Japanese, Korean, Chinese, French...)
 * @return {string} Bản dịch
 * @customfunction
 */
function GEMINI_TRANSLATE(text, targetLang) {
  if (!text || !targetLang) return 'Nhập text và ngôn ngữ đích';

  const prompt = 'Dịch chính xác đoạn text sau sang ' + targetLang
    + '. CHỈ trả lời bản dịch, không giải thích.\n\nText: "' + text + '"';

  return GEMINI(prompt, 500);
}

/**
 * Phân loại nội dung bằng Gemini (miễn phí)
 * =GEMINI_CLASSIFY(A2, "Khiếu nại, Hỏi thông tin, Khen ngợi, Yêu cầu hỗ trợ")
 *
 * @param {string} text - Nội dung cần phân loại
 * @param {string} categories - Danh sách category phân cách bằng dấu phẩy
 * @return {string} Category phù hợp nhất
 * @customfunction
 */
function GEMINI_CLASSIFY(text, categories) {
  if (!text || !categories) return 'Nhập text và danh sách category';

  const prompt = 'Phân loại đoạn text sau vào đúng 1 trong các category: ['
    + categories + ']. CHỉ trả lời tên category, không giải thích.'
    + '\n\nText: "' + text + '"';

  return GEMINI(prompt, 20);
}

Sử dụng hàm Gemini trong Sheets

Công thức Kết quả Chi phí
=GEMINI("viết tagline cho quán cafe vintage") Tagline sáng tạo Miễn phí
=GEMINI_SENTIMENT(A2) Tích cực/Tiêu cực/Trung lập Miễn phí
=GEMINI_TRANSLATE(A2, "English") Bản dịch tiếng Anh Miễn phí
=GEMINI_CLASSIFY(A2, "Bug, Feature, Question") Category phù hợp Miễn phí

Cách 3: Dùng GPT for Sheets Add-on (Không Cần Code)

Nếu bạn không muốn viết code Apps Script, GPT for Sheets and Docs là add-on phổ biến nhất giúp bạn sử dụng AI trực tiếp trong Google Sheets mà không cần một dòng code nào.

Cài đặt GPT for Sheets

  1. 1. Trong Google Sheets → Extensions → Add-ons → Get add-ons
  2. 2. Tìm "GPT for Sheets and Docs" (by Talarian)
  3. 3. Click Install → Cho phép quyền truy cập
  4. 4. Sau khi cài → Extensions → GPT for Sheets → Set API key
  5. 5. Nhập OpenAI API key → Save
  6. 6. Bắt đầu sử dụng các hàm GPT ngay!

Các hàm có sẵn trong GPT for Sheets

=GPT() Hàm chính - gọi AI với bất kỳ prompt nào
=GPT("Viết mô tả ngắn 50 từ cho sản phẩm: " & A2)
=GPT("Tóm tắt: " & A2, "Trả lời trong 1 câu")
=GPT(A2, B2, C2)  // prompt, context, max_tokens
=GPT_LIST() Tạo danh sách - kết quả tự động tràn xuống nhiều ô
=GPT_LIST("Liệt kê 10 ý tưởng content cho quán cafe")
=GPT_LIST("5 từ khóa SEO cho: " & A2)
// Kết quả tự đổ xuống 10 ô phía dưới
=GPT_TABLE() Tạo bảng dữ liệu - AI tạo bảng có cột và hàng
=GPT_TABLE("Bảng so sánh 5 CMS phổ biến: WordPress, Shopify, Wix, Squarespace, Webflow. Cột: Tên, Giá, Ưu điểm, Nhược điểm")
// Kết quả tự tạo bảng với header và dữ liệu
=GPT_TRANSLATE() Dịch thuật chuyên dụng - tốt hơn Google Translate
=GPT_TRANSLATE(A2, "Vietnamese", "English")
=GPT_TRANSLATE(A2, "Vietnamese", "Japanese")
// Dịch chính xác hơn, giữ context tốt hơn

GPT for Sheets - Free vs Pro:

  • Free: Giới hạn số lượng request/ngày, dùng model cũ hơn
  • Pro ($9/tháng): Không giới hạn, dùng GPT-4o, batch processing, priority
  • Cả 2 đều cần OpenAI API key riêng và trả phí API theo usage
  • Lưu ý: Chi phí = Phí add-on ($0-9/tháng) + Phí API OpenAI (theo usage)

10 Use Cases Thực Tế: AI + Google Sheets

Dưới đây là 10 ứng dụng thực tế mà bạn có thể áp dụng ngay hôm nay. Mỗi use case kèm công thức mẫu và ước tính thời gian tiết kiệm.

01

Viết mô tả sản phẩm hàng loạt

E-commerce có 200+ sản phẩm cần mô tả SEO-friendly.

=AI_PRODUCT_DESC(A2, B2, C2)

Tiết kiệm: 20 giờ/200 sản phẩm

02

Phân loại & Sentiment feedback KH

10.000 review cần phân loại Tích cực/Tiêu cực + tag vấn đề.

=AI_SENTIMENT(A2)

Tiết kiệm: 15 giờ/10.000 review

03

Dịch nội dung đa ngôn ngữ

Dịch catalog sản phẩm, menu nhà hàng sang 5 ngôn ngữ.

=GEMINI_TRANSLATE(A2, "English")

Tiết kiệm: 10 giờ/500 dòng x 5 ngôn ngữ

04

Tóm tắt báo cáo dài

50 báo cáo tuần từ các phòng ban cần tóm tắt 3-5 dòng.

=AI_SUMMARIZE(A2, 3)

Tiết kiệm: 5 giờ/50 báo cáo

05

Tạo email marketing cá nhân hóa

Viết email cá nhân cho từng phân khúc KH dựa trên lịch sử mua.

=AI("Viết email cho "&A2&" đã mua "&B2)

Tiết kiệm: 8 giờ/500 email

06

Phân tích & gợi ý từ khóa SEO

Từ 50 bài viết, AI gợi ý từ khóa related, LSI keywords.

=GPT_LIST("5 từ khóa SEO cho: "&A2)

Tiết kiệm: 4 giờ/50 bài viết

07

Clean data: Chuẩn hóa tên & địa chỉ

5.000 dòng dữ liệu KH cần chuẩn hóa tên, SĐT, địa chỉ.

=AI("Chuẩn hóa địa chỉ VN: "&A2)

Tiết kiệm: 12 giờ/5.000 dòng

08

Tạo FAQ từ nội dung có sẵn

Từ 30 bài blog, AI tự tạo 5 câu FAQ cho mỗi bài (cho SEO schema).

=GPT_LIST("Tạo 5 FAQ từ: "&A2)

Tiết kiệm: 6 giờ/30 bài

09

Phân loại ticket hỗ trợ tự động

300 ticket/ngày cần phân loại: Bug, Feature request, Billing, General.

=GEMINI_CLASSIFY(A2,"Bug,Feature,Billing")

Tiết kiệm: 3 giờ/ngày

10

Tạo báo cáo tự động từ raw data

AI đọc dữ liệu bán hàng và viết nhận xét, insight, đề xuất.

=AI("Phân tích dữ liệu bán hàng: "&A2:D2)

Tiết kiệm: 4 giờ/báo cáo tuần

Script Nâng Cao: Batch Processing Thông Minh

Khi xử lý hàng trăm hoặc hàng nghìn dòng, gọi API từng ô sẽ rất chậm và dễ bị rate limit. Dưới đây là script nâng cao với batch processing, retry logic, và progress tracking.

// ============================================
// BATCH PROCESSING AI - Xử lý hàng loạt thông minh
// Hỗ trợ cả OpenAI và Gemini
// ============================================

/**
 * Xử lý hàng loạt: Gọi AI cho nhiều dòng cùng lúc
 * Tự động retry khi lỗi, có progress bar
 */
function batchAI() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const ui = SpreadsheetApp.getUi();

  // Cấu hình
  const INPUT_COL = 1;   // Cột A - chứa input (prompt hoặc dữ liệu)
  const OUTPUT_COL = 4;  // Cột D - nơi ghi kết quả
  const START_ROW = 2;   // Bắt đầu từ dòng 2 (dòng 1 là header)
  const BATCH_SIZE = 10; // Xử lý 10 dòng 1 lần rồi nghỉ
  const DELAY_MS = 2000; // Nghỉ 2 giây giữa các batch (tránh rate limit)

  const lastRow = sheet.getLastRow();
  const totalRows = lastRow - START_ROW + 1;
  let processed = 0;
  let errors = 0;

  for (let row = START_ROW; row <= lastRow; row++) {
    // Bỏ qua nếu đã có kết quả
    const existingResult = sheet.getRange(row, OUTPUT_COL).getValue();
    if (existingResult && !String(existingResult).startsWith('Lỗi')) {
      processed++;
      continue;
    }

    const input = sheet.getRange(row, INPUT_COL).getValue();
    if (!input) continue;

    try {
      // Gọi AI (thay đổi hàm tùy use case)
      const result = AI('Viết mô tả sản phẩm 100 từ cho: ' + input);
      sheet.getRange(row, OUTPUT_COL).setValue(result);
      processed++;

      // Progress update mỗi 10 dòng
      if (processed % BATCH_SIZE === 0) {
        SpreadsheetApp.flush(); // Lưu kết quả
        Utilities.sleep(DELAY_MS); // Nghỉ tránh rate limit
        Logger.log('Progress: ' + processed + '/' + totalRows);
      }
    } catch (error) {
      // Retry 1 lần
      Utilities.sleep(3000);
      try {
        const result = AI('Viết mô tả sản phẩm 100 từ cho: ' + input);
        sheet.getRange(row, OUTPUT_COL).setValue(result);
        processed++;
      } catch (retryError) {
        sheet.getRange(row, OUTPUT_COL).setValue('Lỗi: ' + retryError.toString());
        errors++;
      }
    }
  }

  ui.alert('Hoàn thành! Xử lý: ' + processed + ' | Lỗi: ' + errors);
}

/**
 * Tạo menu custom trong Google Sheets
 */
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('AI Tools')
    .addItem('Batch AI Processing', 'batchAI')
    .addItem('Clear AI Results', 'clearResults')
    .addToUi();
}

/**
 * Xóa cột kết quả để chạy lại
 */
function clearResults() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  sheet.getRange(2, 4, lastRow - 1, 1).clearContent(); // Clear cột D
  SpreadsheetApp.getUi().alert('Đã xóa kết quả AI');
}

Lưu ý quan trọng khi Batch Processing:

  • Apps Script có giới hạn runtime 6 phút cho mỗi lần chạy. Nếu có 1.000+ dòng, chia thành nhiều lần chạy
  • OpenAI rate limit: 60 request/phút cho gpt-4o-mini. Điều chỉnh DELAY_MS nếu bị lỗi 429
  • Gemini rate limit: 60 request/phút (free tier). Tăng DELAY_MS lên 3000ms nếu cần
  • Kết quả được lưu ngay vào sheet - nếu script timeout, chạy lại sẽ skip các dòng đã xong

So Sánh Chi Tiết: ChatGPT vs Gemini Cho Google Sheets

Câu hỏi phổ biến nhất: Nên dùng ChatGPT hay Gemini? Dưới đây là bảng so sánh chi tiết giúp bạn quyết định.

Tiêu chí OpenAI (ChatGPT) Google Gemini
Model tốt nhất GPT-4o Gemini 2.0 Pro
Model tiết kiệm GPT-4o-mini Gemini 2.0 Flash
Free tier Không (cần nạp $5+) Có (60 req/phút, 1500/ngày)
Giá API (1M token) $0.15 (mini) / $2.50 (4o) Free / $1.25 (Pro paid)
Tốc độ response Nhanh (1-3 giây) Rất nhanh (Flash: 0.5-2 giây)
Chất lượng tiếng Việt Rất tốt (hàng đầu) Tốt (cải thiện nhiều)
Viết nội dung sáng tạo Xuất sắc Tốt
Phân tích dữ liệu Tốt Rất tốt (native Google)
Rate limit 60 req/phút (tier 1) 60 req/phút (free)
Add-on hỗ trợ Nhiều (GPT for Sheets...) Ít hơn
Yêu cầu thẻ tín dụng Không (free tier)

Khuyến nghị: Dùng cả hai!

  • Gemini (miễn phí) cho: Phân loại, sentiment analysis, dịch thuật, clean data - các tác vụ đơn giản nhưng khối lượng lớn
  • ChatGPT (trả phí) cho: Viết content sáng tạo, email marketing, mô tả sản phẩm chất lượng cao - nơi chất lượng output quan trọng
  • Cả hai có thể chạy song song trong cùng 1 Google Sheets - chỉ cần cài 2 script riêng biệt

Chi Phí Thực Tế: Tính Tiền API Cho 1.000 Request

Nhiều người lo ngại chi phí khi dùng AI API. Thực tế, chi phí thấp hơn nhiều so với bạn nghĩ. Dưới đây là bảng tính chi phí thực tế.

Giả định: 1.000 request, mỗi request ~200 tokens input + 300 tokens output

Model Giá Input (1M token) Giá Output (1M token) Chi phí 1.000 req
GPT-4o-mini $0.15 $0.60 ~$0.21 (~5.300 VNĐ)
GPT-4o $2.50 $10.00 ~$3.50 (~87.500 VNĐ)
Gemini 2.0 Flash (free) $0 $0 $0 (Miễn phí!)
Gemini 2.0 Pro (paid) $1.25 $5.00 ~$1.75 (~43.750 VNĐ)

Kết luận:

Với GPT-4o-mini, 1.000 request chỉ tốn khoảng 5.300 VNĐ - rẻ hơn 1 ly cafe! Với Gemini Flash, hoàn toàn miễn phí. So với việc thuê nhân viên làm tay, AI tiết kiệm 99%+ chi phí.

Ước tính chi phí theo use case phổ biến

Use Case Số lượng Chi phí (GPT-4o-mini) Chi phí (Gemini Free)
Viết mô tả 500 sản phẩm 500 req ~2.600 VNĐ Miễn phí
Sentiment 10.000 review 10.000 req ~21.000 VNĐ Miễn phí
Dịch 1.000 dòng text 1.000 req ~5.300 VNĐ Miễn phí
Email marketing 2.000 KH 2.000 req ~12.600 VNĐ Miễn phí

Lưu Ý Bảo Mật Khi Dùng AI API

Khi gửi dữ liệu qua API, bạn cần hiểu rõ rủi ro bảo mật và cách phòng tránh. Đây là phần quan trọng nhất mà nhiều người bỏ qua.

8 Quy Tắc Bảo Mật Bắt Buộc

1

KHÔNG gửi dữ liệu nhạy cảm qua API

Tuyệt đối không gửi: CMND/CCCD, số thẻ tín dụng, mật khẩu, thông tin y tế, bí mật kinh doanh.

2

Ẩn danh dữ liệu trước khi gửi

Thay tên thật bằng mã KH (KH001), xóa SĐT và email khỏi prompt. AI chỉ cần nội dung, không cần PII.

3

Bảo vệ API key

Không chia sẻ sheet chứa API key. Dùng Script Properties (File → Project Settings) để lưu key an toàn thay vì hardcode.

4

Đặt spending limit

Trong OpenAI Billing, đặt monthly limit (VD: $10/tháng) để tránh chi phí vượt kiểm soát nếu script lỗi.

5

Kiểm tra chính sách sử dụng dữ liệu

OpenAI API (trả phí) KHÔNG dùng dữ liệu bạn gửi để train model. Gemini API cũng tương tự. Nhưng đọc kỹ Terms of Service.

6

Rotate API key định kỳ

Tạo API key mới mỗi 3 tháng và revoke key cũ. Đặt lịch nhắc nhở trên Google Calendar.

7

Review output trước khi publish

AI có thể hallucinate (bịa thông tin). Luôn review kết quả, đặc biệt là số liệu, tên riêng, và thông tin pháp lý.

8

Phân quyền sheet cẩn thận

Sheet chứa Apps Script với API key chỉ nên share cho người cần thiết. Dùng "Viewer" role cho người chỉ cần xem kết quả.

Lưu API Key an toàn hơn với Script Properties

Thay vì hardcode API key trực tiếp trong code (dễ bị lộ khi share sheet), hãy dùng Script Properties:

// ============================================
// CÁCH LƯU API KEY AN TOÀN
// ============================================

// Bước 1: Lưu API key vào Script Properties
// Vào Apps Script → Project Settings → Script Properties → Add
// Key: OPENAI_API_KEY | Value: sk-xxxxxxx
// Key: GEMINI_API_KEY | Value: AIzaSyxxxxxxx

// Bước 2: Đọc key từ Properties (không hardcode)
function getOpenAIKey() {
  return PropertiesService.getScriptProperties()
    .getProperty('OPENAI_API_KEY');
}

function getGeminiKey() {
  return PropertiesService.getScriptProperties()
    .getProperty('GEMINI_API_KEY');
}

// Bước 3: Sử dụng trong hàm AI
function AI_SECURE(prompt, maxTokens) {
  const apiKey = getOpenAIKey();
  if (!apiKey) return 'Chưa cấu hình API key. Vào Project Settings → Script Properties';

  // ... (giống hàm AI ở trên, thay OPENAI_API_KEY bằng apiKey)
  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: { 'Authorization': 'Bearer ' + apiKey },
    payload: JSON.stringify({
      model: 'gpt-4o-mini',
      messages: [{ role: 'user', content: prompt }],
      max_tokens: maxTokens || 500
    }),
    muteHttpExceptions: true
  };

  const response = UrlFetchApp.fetch(
    'https://api.openai.com/v1/chat/completions', options
  );
  const json = JSON.parse(response.getContentText());
  return json.choices[0].message.content.trim();
}

Kết Hợp Cả Hai: Script All-in-One

Dưới đây là script hoàn chỉnh kết hợp cả OpenAI và Gemini trong cùng 1 file, với menu custom, error handling, và tự động chọn model phù hợp.

// ============================================
// ALL-IN-ONE AI TOOLKIT FOR GOOGLE SHEETS
// Hỗ trợ: OpenAI GPT + Google Gemini
// Version: 2.0 (2026)
// ============================================

/**
 * Hàm AI thông minh - tự chọn model phù hợp
 * =SMART_AI("viết mô tả sản phẩm", "quality")  → Dùng GPT-4o
 * =SMART_AI("phân loại feedback", "fast")       → Dùng Gemini Flash (miễn phí)
 * =SMART_AI("dịch sang tiếng Anh")              → Dùng Gemini Flash (mặc định)
 *
 * @param {string} prompt - Câu hỏi/yêu cầu
 * @param {string} mode - "fast" (Gemini, miễn phí), "quality" (GPT-4o), "balanced" (GPT-4o-mini)
 * @return {string} Kết quả từ AI
 * @customfunction
 */
function SMART_AI(prompt, mode) {
  if (!prompt) return 'Nhập prompt';
  mode = (mode || 'fast').toLowerCase();

  switch (mode) {
    case 'quality':
      return callOpenAI(prompt, 'gpt-4o', 500);
    case 'balanced':
      return callOpenAI(prompt, 'gpt-4o-mini', 500);
    case 'fast':
    default:
      return callGemini(prompt, 500);
  }
}

function callOpenAI(prompt, model, maxTokens) {
  const apiKey = PropertiesService.getScriptProperties()
    .getProperty('OPENAI_API_KEY');
  if (!apiKey) return 'Chưa set OPENAI_API_KEY trong Script Properties';

  const resp = UrlFetchApp.fetch('https://api.openai.com/v1/chat/completions', {
    method: 'post',
    contentType: 'application/json',
    headers: { 'Authorization': 'Bearer ' + apiKey },
    payload: JSON.stringify({
      model: model,
      messages: [
        { role: 'system', content: 'Trả lời bằng tiếng Việt, ngắn gọn.' },
        { role: 'user', content: prompt }
      ],
      max_tokens: maxTokens
    }),
    muteHttpExceptions: true
  });

  const json = JSON.parse(resp.getContentText());
  if (json.error) return 'OpenAI Error: ' + json.error.message;
  return json.choices[0].message.content.trim();
}

function callGemini(prompt, maxTokens) {
  const apiKey = PropertiesService.getScriptProperties()
    .getProperty('GEMINI_API_KEY');
  if (!apiKey) return 'Chưa set GEMINI_API_KEY trong Script Properties';

  const url = 'https://generativelanguage.googleapis.com/v1beta/models/'
    + 'gemini-2.0-flash:generateContent?key=' + apiKey;

  const resp = UrlFetchApp.fetch(url, {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify({
      contents: [{ parts: [{ text: prompt + ' (Trả lời tiếng Việt)' }] }],
      generationConfig: { maxOutputTokens: maxTokens, temperature: 0.7 }
    }),
    muteHttpExceptions: true
  });

  const json = JSON.parse(resp.getContentText());
  if (json.error) return 'Gemini Error: ' + json.error.message;
  return json.candidates[0].content.parts[0].text.trim();
}

Xử Lý Lỗi Thường Gặp

Khi làm việc với AI API trên Google Sheets, bạn có thể gặp một số lỗi phổ biến. Dưới đây là cách khắc phục nhanh.

Lỗi 1: "You exceeded your current quota" (Error 429)

Nguyên nhân: Gọi API quá nhanh, vượt rate limit

Cách sửa: Tăng DELAY_MS trong batch script lên 3000-5000ms. Với OpenAI, kiểm tra Billing đã nạp tiền chưa. Với Gemini free, chờ 1 phút rồi thử lại.

Lỗi 2: "Invalid API key" (Error 401)

Nguyên nhân: API key sai, hết hạn, hoặc đã bị revoke

Cách sửa: Kiểm tra lại API key (không có khoảng trắng thừa). Tạo key mới nếu cần. Đảm bảo copy đúng toàn bộ key.

Lỗi 3: "Exceeded maximum execution time" (Apps Script timeout)

Nguyên nhân: Script chạy quá 6 phút (giới hạn của Apps Script)

Cách sửa: Chia batch nhỏ hơn (50 dòng/lần thay vì 500). Hoặc dùng Trigger-based processing: script tự lưu progress, dùng time-based trigger chạy tiếp.

Lỗi 4: Custom function chỉ trả về "Loading..."

Nguyên nhân: Custom function trong Google Sheets có timeout ngắn hơn (30 giây)

Cách sửa: Giảm max_tokens xuống 200-300. Dùng model nhanh hơn (gpt-4o-mini hoặc Gemini Flash). Nếu vẫn chậm, chuyển sang dùng batchAI() thay vì custom function.

Lỗi 5: Kết quả AI bị cắt giữa chừng

Nguyên nhân: max_tokens quá thấp cho nội dung dài

Cách sửa: Tăng max_tokens: =AI(prompt, , 1000). Hoặc yêu cầu AI "trả lời trong X từ" trong prompt để kiểm soát độ dài.

Câu Hỏi Thường Gặp (FAQ)

API key có bị lộ khi share Google Sheets không?

Nếu bạn hardcode API key trong Apps Script, người có quyền Editor có thể xem code và thấy key. Giải pháp: Dùng Script Properties (Project Settings) để lưu key - chỉ owner mới thấy. Hoặc share sheet với quyền Viewer (không xem được script).

Dùng ChatGPT hay Gemini cho tiếng Việt tốt hơn?

ChatGPT (GPT-4o) vẫn nhỉnh hơn về chất lượng tiếng Việt, đặc biệt với nội dung sáng tạo và copywriting. Tuy nhiên, Gemini 2.0 đã cải thiện rất nhiều và đủ tốt cho 80% use case thông thường (phân loại, dịch, tóm tắt). Nếu ngân sách hạn chế, Gemini miễn phí là lựa chọn tuyệt vời.

Có thể xử lý bao nhiêu dòng dữ liệu mỗi ngày?

Phụ thuộc vào rate limit: Gemini free tier cho phép 1.500 request/ngày (~1.500 dòng). OpenAI tier 1 cho phép 60 request/phút = 86.400/ngày (thực tế ~10.000-20.000 dòng do cần delay). Nếu cần xử lý hàng chục nghìn dòng, nên dùng paid tier với rate limit cao hơn.

Dữ liệu gửi qua API có bị dùng để train model không?

OpenAI API (trả phí): KHÔNG dùng dữ liệu API để train model (kể từ 03/2023). Google Gemini API: Tương tự, dữ liệu API không dùng để train. Tuy nhiên, với Gemini free tier, Google có thể dùng dữ liệu để cải thiện dịch vụ (đọc kỹ Terms). Nếu dữ liệu nhạy cảm, nên dùng paid tier của cả hai.

Custom function =AI() có tự chạy lại khi mở sheet không?

Không. Google Sheets cache kết quả custom function. Chỉ khi bạn thay đổi input (ô tham chiếu) thì hàm mới chạy lại. Nếu muốn refresh, thêm tham số giả: =AI(A2, , , NOW()) - nhưng lưu ý NOW() thay đổi mỗi phút nên hàm sẽ chạy liên tục (tốn API).

Có thể dùng AI API để xử lý hình ảnh trong Google Sheets không?

Có! Cả GPT-4o và Gemini 2.0 đều hỗ trợ vision (phân tích hình ảnh). Bạn có thể gửi URL hình ảnh qua API để AI mô tả sản phẩm từ ảnh, đọc text từ ảnh (OCR), hoặc phân loại hình ảnh. Tuy nhiên, cần code phức tạp hơn (gửi base64 image). Bài viết nâng cao sẽ hướng dẫn chi tiết.

Tổng Kết: Roadmap Tích Hợp AI Vào Google Sheets

Để tận dụng tối đa sức mạnh AI trên Google Sheets, hãy theo lộ trình sau:

1

Tuần 1: Bắt đầu với Gemini (miễn phí)

Tạo API key Gemini, copy script vào Apps Script, thử =GEMINI() với các prompt đơn giản. Không tốn đồng nào.

2

Tuần 2: Áp dụng cho 1 use case thực tế

Chọn 1 task cụ thể (VD: phân loại feedback), tạo custom function chuyên dụng, chạy với 100 dòng thật.

3

Tuần 3: Thêm OpenAI cho nội dung quan trọng

Nạp $5 vào OpenAI, dùng GPT-4o-mini cho viết mô tả sản phẩm, email marketing. So sánh chất lượng với Gemini.

4

Tuần 4: Scale với Batch Processing

Triển khai batchAI() cho 1.000+ dòng. Kết hợp Gemini (tác vụ đơn giản) + ChatGPT (tác vụ quan trọng). Tối ưu chi phí.

5

Tháng 2+: Tự động hóa hoàn toàn

Kết hợp với Trigger (tự chạy hàng ngày), Google Form (auto-process input mới), Looker Studio (visualize kết quả).

  • Miễn phí với Gemini - 1.500 request/ngày, không cần thẻ tín dụng

  • Siêu rẻ với ChatGPT - 1.000 request chỉ 5.300 VNĐ (GPT-4o-mini)

  • Copy-paste code - Script sẵn dùng, chỉ cần thay API key

  • 10 use cases thực tế - Từ viết content đến phân tích dữ liệu

  • Tiết kiệm 10-20 giờ/tuần - Giải phóng thời gian cho việc quan trọng

AI trên Google Sheets không phải là tương lai xa vời - nó là hiện tại. Với chỉ 15 phút setup ban đầu, bạn đã có một trợ lý AI mạnh mẽ ngay trong bảng tính quen thuộc. Hãy bắt đầu với Gemini miễn phí hôm nay!

Muốn tích hợp AI chuyên sâu hơn cho doanh nghiệp?

Khám phá Content AI v2.0 trên SheetStore - Phần mềm tích hợp sẵn Google Gemini + OpenAI GPT, tạo nội dung hàng loạt trực tiếp trên Google Sheets với giao diện đẹp, không cần viết code.

Truy cập sheet.com.vn để tìm hiểu thêm và dùng thử miễn phí.

Chia sẻ bài viết:

Tuân Hoang

Tuân Hoang

Đội ngũ SheetStore

Bạn thấy bài viết hữu ích?

Đăng ký nhận thông báo khi có bài viết mới.

Nhận thông báo khi có bài viết mới. Không spam, hứa luôn! 😊

Bình luận (0)

Vui lòng đăng nhập để tham gia thảo luận