16

Sử dụng Google Apps Script, tôi muốn đặt định dạng cho ô Google Trang tính thành văn bản thuần túy.Định dạng ô Google Trang tính ở dạng thô qua Apps Script

Lý do tôi muốn làm điều này là vì tôi muốn hiển thị ngày theo định dạng ngày của Hoa Kỳ (MM/DD/YYYY). [Chúng tôi có thể giả định miền địa phương trong tài khoản Google của OP được đặt để sử dụng DD/MM/YYYY, một định dạng ngày phổ biến hơn. . -ed]

tôi tạo ra các chuỗi như thế này:

var thisDate = Utilities.formatDate (new Date(), SpreadsheetApp.getActiveSpreadsheet(). getSpreadsheetTimeZone(), "MM/d/yyyy"); 

... mà trả về ngày theo định dạng của Hoa Kỳ, 2012/06/13, đó là những gì tôi muốn. Tuy nhiên, khi tôi thiết lập giá trị của một tế bào đến chuỗi:

sheet.getRange (1, n). setValue (thisDate); 

... ngày được định dạng vào tế bào theo miền địa phương của tôi, 13/06/2012, không phải là định dạng của Hoa Kỳ.

Các hoạt động sau đây cũng thất bại, bởi vì ngày được trả về trong định dạng chuẩn, không phải là định dạng của Hoa Kỳ:

sheet.getRange (1, n). getValue() == "06/13/2012" 

Khi các tế bào được định dạng dưới dạng văn bản thuần tuý, và không phải là một ngày, tất cả mọi thứ hoạt động tốt.

Vì vậy, câu hỏi của tôi là, cách định dạng ô bằng JavaScript.

Trả lời

0

Rất tiếc, văn bản của gói không phù hợp. Tài liệu ngay khi ô nhận được thông tin như ngày tháng, chỉ định dạng ô. Tìm cách không tạo ngày)

var thisDate1 = Utilities.formatDate (new Date(), SpreadsheetApp.getActiveSpreadsheet(). getSpreadsheetTimeZone(), "MM//d//yyyy"); 

Xin lỗi vì vậy trả lời muộn. Tất cả tay đều không chạm tới.

23

Câu trả lời khác, để đặt định dạng thành 'văn bản thuần túy' trong javascript, không hoạt động. Tuy nhiên, điều này có nghĩa là:

sheet.getRange(1,n).setNumberFormat('@[email protected]'); 

Vì vậy, giá trị ma thuật để định dạng văn bản theo chương trình là '@ STRING @'!

+1

FM. Google có ghi lại nội dung này ở bất kỳ đâu không? – bmacnaughton

+1

Tôi thấy rằng chỉ '@' hoạt động là tốt. Liên kết này giúp - http://www.blackcj.com/blog/2015/05/18/cell-number-formatting-with-google-apps-script/ – bmacnaughton

3

Một bổ sung cho câu trả lời hay Christian: tôi đã nhận thấy rằng nếu tế bào mục tiêu của bạn đã được thiết lập để định dạng văn bản (bằng tay), thiết lập một giá trị với range.setValue() mà có thể không được hiểu như là một văn bản (giống như một ngày, hoặc một số), sẽ tự động thay đổi định dạng số. Vì vậy, giải pháp tốt, nếu bạn muốn chắc chắn để giữ một định dạng văn bản là

range.setValue ("01293849847") NumberFormat ("@").

và không

range.numberFormat ("@").setValue ("01293849847");

1

Một cách khác để buộc các giá trị được lưu lại dưới dạng văn bản đơn giản:

Thêm vào trước một dấu ngoặc kép: '. Điều này không ảnh hưởng đến giá trị được hiển thị và cũng bằng cách đọc giá trị quay lại dấu ngoặc kép không được bao gồm.

let dateStr = '07-07-20017'; 
sheet.getRange(x, y).setValue("'" + dateStr); 

let backStr = sheet.getRange(x, y).getValue(); 
assert(dateStr === backStr); 
+0

Thật dễ dàng, cảm ơn bạn :) Chúng tôi có biết nếu đó là tài liệu bất cứ nơi nào? – mlvljr

0

Tôi đã làm như dưới đây và hoạt động như tôi mong đợi. Cột B của tôi hiển thị đúng số có 3 chữ số (ví dụ: 004) và cột C của tôi hiển thị số không đúng 10 chữ số (ví dụ: 0060000001) dưới dạng văn bản. Tôi đã tải xuống tệp mà nó đã chuyển đổi thành Excel dưới dạng văn bản có các số 0 đệm. Tôi nghĩ rằng nó sẽ làm các trick với ngày như một văn bản là tốt.

winSS.getRange ("US! B2: B"). SetNumberFormat ("000"). SetNumberFormat ("@"); winSS.getRange ("US! C2: C"). SetNumberFormat ("0000000000"). SetNumberFormat ("@");

Các vấn đề liên quan