Это поможет, если вы разместите код, который вы фактически выполнили. Предполагая, что ws0
является объектом Worksheet
, правильный синтаксис равен ws0.write(row_index, column_index, unicode_text)
.
Что относится к cell
, и как вы извлекли его из какой базы данных?
Что означает «данные в excel garbled»? Что вы используете в Linux для просмотра содержимого файла XLS? Что вы на самом деле видели на экране? Можете ли вы правильно отображать китайские символы в Linux с помощью другого программного обеспечения?
Попробуйте ввести это в интерактивном режиме Python на Linux:
>>> import xlwt
>>> b = xlwt.Workbook()
>>> s = b.add_sheet('zh')
>>> big5_text = '\xa7A\xa6n\xa1I'
>>> u_text = big5_text.decode('big5')
>>> s.write(0, 0, u_text)
>>> b.save('nihao.xls')
Затем попробуйте открыть файл XLS с OpenOffice Calc ... что вы видите?
Update
(1) "Код, который вы запускали" должно быть более чем на 1 линии; пожалуйста, покажите это.
(2) Пожалуйста, запустите небольшой фрагмент кода, который я вам предоставил, и сообщаем результаты. Если это сработает, мы можем сосредоточиться на таких вещах, как то, как вы получаете данные из какой базы данных. [Пожалуйста, ответьте на этот вопрос тоже]
(3) Пожалуйста, ответьте на вопрос об отображении китайского языка под Linux.
(4) Считайте, что видя "???" вместо китайских (или любых других) символов обычно является результатом unicode_text.encode('some_encoding', 'replace')
(или другого кода с таким же намерением) с неправильным кодированием (например, «ascii») - возможно, предшествует аналогичный код de. xlwt делает unicode_text.encode()
, чтобы сохранить ваши строки в файле unicode; он использует «latin1» или «utf_16le», как требуется для кодирования, и «strict», а не «replace» для следующего arg. Если Excel покажет вам «???», вполне вероятно, что данные уже искажены, прежде чем вы подадите их на xlwt. Что говорит print repr(cell)
?
(5) Если вы запускаете одни и те же версии xlwt и Python с теми же входными данными и тем же сценарием Python, выходной файл с Linux должен быть идентичен байты за байт с выходным файлом из Windows. Различия в версиях xlwt и Python вряд ли могут сделать файлы разными. Пожалуйста, сравните файлы, полученные в результате короткого сценария, который я вам дал, используя двоичное сравнение (например, fc /b ...
в окне «Командная строка Windows»). Пожалуйста, укажите версии Python и xlwt, которые вы используете в каждой среде.
(6) Рассмотрите возможность перехода на the usual forum for xlwt questions ... таким образом вы можете легко отправить мне файлы, если необходимо, и я получаю электронную почту при создании новой публикации вместо того, чтобы опросить веб-сайт с интервалами ...
На самом деле, я отправляю excel в качестве прикрепленного файла, который был создан под Linux и просматривает прикрепленный файл под окнами, он показан как ??? , в то время как файл, созданный под окнами, в порядке. –
Теперь введите этот маленький скрипт в Linux и отправьте результат в Windows. Что ты видишь? –
Я запустил ваш скрипт, и все в порядке. Я думаю, что это некоторая проблема с модулем cx_Oracle. (Я использую cx_Oracle для получения данных из oracle) В окне cx_Oracle находится cx_oracle_4.4.1.9i (python 2.5.2, python 2.5 xlwt-0.72, с полной установкой 10g oracle) , а на Linux - cx_oracle_5.0.3-11g (python 2.4.3, oracle-instantclient11.2-basic-11.2.0.1.0-1.i386) Итак, я пытаюсь установить cx_Oracle для 9i или 10g с помощью instantclient, но Сообщения об ошибках: undefined sysmbol: OCIDB Shutdown –