2013-06-12 43 views
9

Tôi đang sử dụng xlwt để tạo bảng tính .xls và tôi cần tạo ô ngày.Viết ngày xlwt với định dạng ngày 'Excel'

Tôi đã viết số và đặt chuỗi định dạng số để làm cho chúng trông giống như ngày tháng, nhưng phê bình chúng không thực sự được viết thành ngày - nếu bạn định dạng ô trong Excel, đó là "tùy chỉnh" Danh mục thay vì một "ngày", và điều này quan trọng.

Tôi có thể tạo xlwt thực sự viết các ô "ngày" không?

Trả lời

17

Số sẽ hiển thị trong "Ngày" loại Excel nếu bạn sử dụng một chuỗi định dạng tương ứng với một trong Excel tích hợp trong các chuỗi định dạng như dd/mm/yyy. ví dụ:

import xlwt 
import datetime 

workbook = xlwt.Workbook() 
worksheet = workbook.add_sheet('Sheet1') 

date_format = xlwt.XFStyle() 
date_format.num_format_str = 'dd/mm/yyyy' 

worksheet.write(0, 0, datetime.datetime.now(), date_format) 

workbook.save('date_format.xls') 

Nếu bạn sửa đổi ví dụ này để sử dụng chuỗi định dạng d/mm/yyy thì số sẽ hiển thị trong danh mục "Tùy chỉnh".

Lưu ý: mã ở trên hoạt động cho phiên bản Excel mà tôi đã thử nhưng có thể điều này tùy thuộc vào biến thể theo vùng. Điều tốt nhất cần làm là định dạng một số trong Excel với định dạng "Ngày" mà bạn muốn và sau đó, trong cùng một hộp thoại, hãy nhấp vào "Tùy chỉnh" để xem chuỗi định dạng nào được liên kết với định dạng "Ngày". Sau đó, sử dụng nó trong chương trình của bạn.

Cũng: Không có bất kỳ loại ngày gốc nào ở định dạng Excel XLS. Tất cả các ngày được lưu trữ dưới dạng số cộng với một định dạng. Không có gì để phân biệt chúng với bất kỳ số nào khác với định dạng ngoại trừ chuỗi định dạng. Đây là một trong những điều làm cho việc phân tích cú pháp tệp Excel trở thành nỗi đau vì bạn phải áp dụng các chẩn đoán để xác định xem một ô có chứa một ngày hay không.

+0

Cảm ơn, đã có nó. – xorsyst

+1

+1 cho ví dụ, nhưng cần thêm rằng chỉ có chuỗi định dạng ISO chẳng hạn như '2014-01-23' sẽ * không * chuyển đổi như mong đợi (định dạng sẽ là ngày, nhưng nội dung sẽ là chuỗi văn bản vô dụng) ; sử dụng đối tượng datetime() thực tế tránh được vấn đề này. Tôi đã không kiểm tra điều này bằng chuỗi ISO toàn diện như '2014-01-23T12: 34: 56', có thể vẫn hoạt động- một người khác nên thả ghi chú ở đây nếu họ biết điều này. – Ryder

+0

@RyderDain Tiêu đề của câu hỏi là gây hiểu lầm và có lẽ cần được chỉnh sửa. Câu hỏi, câu trả lời và ví dụ là về cách tạo các định dạng ngày dựng sẵn so với các định dạng tùy chỉnh bằng cách sử dụng 'xlwt'. Việc tạo ngày thực tế không được thảo luận. – jmcnamara

3

Từ http://www.youlikeprogramming.com/2011/04/examples-generating-excel-documents-using-pythons-xlwt/

nhập một ngày thành một di

 

import xlwt 
import datetime 
workbook = xlwt.Workbook() 
worksheet = workbook.add_sheet('My Sheet') 
style = xlwt.XFStyle() 
style.num_format_str = 'D-MMM-YY' # Other options: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, [h]:mm:ss, mm:ss.0 
worksheet.write(0, 0, datetime.datetime.now(), style) 
workbook.save('Excel_Workbook.xls') 
 
+0

Cảm ơn, nhưng đó là những gì tôi đã làm và nó không hoạt động chính xác, theo câu hỏi của tôi. – xorsyst

+0

Đã cố gắng thay đổi định dạng ô thành 'Chung'. Nhận số dấu chấm động dự kiến. Đã thay đổi thành định dạng 'Ngày' và nó hiển thị ngày chính xác. Có lý do cụ thể nào khiến nó quan trọng không? – shantanoo

+0

Vâng, nó hoạt động, nhưng tôi sợ nó quan trọng là ngày đó là ngày đầu tiên. Tôi chỉ có thể mơ hồ ở đây và nói "yêu cầu". – xorsyst