Chuẩn hóa Google Docs
생성일: 2025년 1월 14일
생성일: 2025년 1월 14일
Crafting JavaScript
I’m mapping out JavaScript code for Google Sheets. It will read URLs, standardize headings to bold, and ensure Vietnamese H1 capitalization is accurate, respecting diacritics.
Understanding capitalization
I’m noting that Vietnamese text capitalization should respect diacritics, like correcting "đỉNh" to "đỉnh". There’s no one-size-fits-all method for capitalizing Vietnamese; each case is unique.
Refining capitalization
Wondering about how to handle Vietnamese text capitalization while preserving diacritics. It’s interesting to see that converting the first letter to uppercase and the rest to lowercase might be effective.
Manipulating text
I'm thinking about capitalizing characters that follow specific punctuation spots, like periods, colons, or dashes. This approach maintains consistency and enhances text formatting, resulting in a more polished presentation.
Piecing together functionality
I’m working through a Google Apps Script to standardize document formatting. This approach includes accessing the spreadsheet, iterating through URLs, and managing headings and capitalizations on each document.
Implementing TitleCase
OK, let me see. I'm integrating TitleCase and bolding headings, while carefully adjusting capitalization after punctuation to ensure clear and consistent text formatting throughout.
Balancing precision and constraints
I'm piecing together a solution for punctuation capitalization without losing formatting. Parsing paragraphs, pinpointing punctuation, and reconstructing text with consistent styles is key.
Revisiting the strategy
Opting for a simpler method, I'm focusing on rewriting the entire document. This means existing formatting might be lost, but it offers a fresh, streamlined approach for demonstration.
Standardizing documents
I’m detailing a JavaScript function for Google Sheets, outlining how it reads URLs, standardizes headings to bold, and capitalizes letters after specific punctuation spots.
Mapping the process
First, extracting Google Doc IDs from URLs. Then, applying TitleCase for Vietnamese text ensures diacritics are kept intact. Finally, using regex to capitalize letters after punctuation marks for consistency.
Thought about Google Sheets script tasks cho 43 giây
Dưới đây là ví dụ một đoạn mã Google Apps Script (JavaScript) chạy trên Google Sheets để thực hiện các yêu cầu:
Lưu ý:
- Đoạn code dưới đây chỉ mang tính minh hoạ cơ bản. Khi triển khai thực tế, việc bảo toàn toàn bộ định dạng (in nghiêng, siêu liên kết, màu chữ, v.v.) phức tạp hơn, do
body.getText()
hoặcbody.clear()
rồiappendParagraph()
có thể làm mất hoặc gộp định dạng cũ.- Nếu tài liệu của bạn có nhiều đoạn/khu vực định dạng riêng, bạn cần xử lý sâu hơn ở mức đoạn (paragraph) hoặc từng “Text Element” trong Google Docs API.
- Mã dưới đây giả định đường dẫn Google Docs có dạng
https://docs.google.com/open?id=xxxxxx
. Ta sẽ tách id dựa trên tham sốid=
để mở tài liệu.
function standardizeDocs() { // Mở file Google Sheets hiện hành const ss = SpreadsheetApp.getActiveSpreadsheet(); // Lấy sheet theo tên const sheet = ss.getSheetByName("Trang tính1"); if (!sheet) { Logger.log("Không tìm thấy sheet 'Trang tính1'."); return; } // Xác định hàng cuối cùng có dữ liệu const lastRow = sheet.getLastRow(); if (lastRow < 2) { Logger.log("Không có dữ liệu nào ở cột A (từ hàng 2 trở xuống)."); return; } // Đọc danh sách URL Docs trong cột A, từ hàng 2 đến hàng cuối const dataRange = sheet.getRange(2, 1, lastRow - 1, 1); const urls = dataRange.getValues().map(function (row) { return row[0]; }); urls.forEach(function (url) { if (!url) return; // Tách docId từ URL const docId = extractDocId(url); if (!docId) { Logger.log("Không tách được docId từ URL: " + url); return; } // Mở Google Docs const doc = DocumentApp.openById(docId); const body = doc.getBody(); // 1. Chuẩn hoá thẻ Heading (H1, H2, H3) thành in đậm. // 2. Riêng H1: Viết hoa chữ cái đầu mỗi từ (title case) có dấu tiếng Việt. const paragraphs = body.getParagraphs(); paragraphs.forEach(function (p) { const heading = p.getHeading(); if ( heading === DocumentApp.ParagraphHeading.HEADING1 || heading === DocumentApp.ParagraphHeading.HEADING2 || heading === DocumentApp.ParagraphHeading.HEADING3 ) { // In đậm đoạn heading p.editAsText().setBold(true); // Nếu là H1 => Title Case (giữ nguyên dấu tiếng Việt) if (heading === DocumentApp.ParagraphHeading.HEADING1) { let textH1 = p.getText(); textH1 = titleCaseVietnamese(textH1); p.setText(textH1); } } }); // 3. Viết hoa ký tự sau dấu '. ', ': ', '- ' // Lưu ý: Ở ví dụ này, để đơn giản, ta sẽ: // - Lấy toàn bộ text của tài liệu // - Xử lý regex viết hoa sau dấu // - Xoá nội dung cũ // - Thêm lại 1 đoạn paragraph mới chứa toàn bộ text đã chỉnh // // Cách này sẽ làm mất các định dạng phức tạp. Nếu cần giữ định dạng, // bạn phải xử lý từng đoạn, từng phần tử text. let fullText = body.getText(); fullText = capitalizeAfterPunctuation(fullText); // Xóa toàn bộ nội dung cũ: body.clear(); // Thêm lại 1 paragraph duy nhất (demo) body.appendParagraph(fullText); // Lưu thay đổi doc.saveAndClose(); }); } /** * Tách docId từ URL dạng: https://docs.google.com/open?id=xxxxxx * Trả về null nếu không tìm thấy */ function extractDocId(url) { const match = url.match(/id=([^&]+)/); return match ? match[1] : null; } /** * Chuyển chuỗi sang dạng Title Case cho tiếng Việt: * - Mỗi từ: chữ cái đầu in hoa, các chữ sau in thường. * - Vẫn giữ nguyên dấu. */ function titleCaseVietnamese(str) { // Tách theo khoảng trắng, xử lý từng từ // Lưu ý: Đây là cách cơ bản, có thể chưa hoàn hảo cho mọi trường hợp viết tắt, tên riêng, ... return str .split(/\s+/) .map(function (word) { if (!word) return word; return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); }) .join(" "); } /** * Viết hoa ký tự ngay sau các dấu: * - ". " * - ": " * - "- " * Regex cơ bản: /(\\. |: |- )(\p{L})/u * - \p{L} trong JS yêu cầu thêm cờ 'u' để nhận biết unicode letter * - Để chắc chắn có dấu tiếng Việt ta có thể dùng range [a-zA-ZÀ-ỹ] */ function capitalizeAfterPunctuation(text) { // Sử dụng 2 nhóm: // Nhóm 1: dấu + khoảng trắng (/. |: |- /) // Nhóm 2: ký tự ngay sau const regex = /(\. |: |- )([a-zA-ZÀ-ỹ])/g; return text.replace(regex, function (match, p1, p2) { return p1 + p2.toUpperCase(); }); }
Giải thích ngắn gọn:
Hàm standardizeDocs()
Hàm extractDocId(url)
: Tách docId dựa vào regex id=...
.
Hàm titleCaseVietnamese(str)
: Tách theo khoảng trắng, từng từ viết hoa chữ cái đầu, giữ nguyên dấu tiếng Việt.
Hàm capitalizeAfterPunctuation(text)
: Dùng regex tìm các nhóm ký tự “. |: |- ” và viết hoa chữ ngay sau đó.
Bạn có thể tùy biến thêm tuỳ theo nhu cầu cụ thể của mình (như xử lý nhiều đoạn thay vì ghép tất cả thành một đoạn, hay bảo toàn định dạng, v.v.). Chúc bạn triển khai thành công!