[英]Python, CSV to XLS by merge_all_to_a_book
簡單的線條即可將.csv文件轉換為.xls文件。
它們可以正常工作,但對於某些文件則不能。 似乎問題出在文件名上。
from pyexcel.cookbook import merge_all_to_a_book
import glob
import os
folder = "C:\\CSV\\"
final_folder = "C:\\XLS\\"
root, dirs, files = os.walk(folder).next()
for path, subdirs, files in os.walk(root):
for f in files:
if f.endswith(".csv"):
merge_all_to_a_book(glob.glob(folder + f), final_folder + f + ".xls")
錯誤信息:
Traceback (most recent call last):
File "C:\Python27\Working Scripts\CSV to xls.py", line 20, in <module>
merge_all_to_a_book(glob.glob(folder + f), final_folder + f + ".xls")
File "C:\Python27\lib\site-packages\pyexcel\cookbook.py", line 148, in merge_all_to_a_book
merged.save_as(outfilename)
File "C:\Python27\lib\site-packages\pyexcel\book.py", line 249, in save_as
return save_book(self, file_name=filename)
File "C:\Python27\lib\site-packages\pyexcel\sources\__init__.py", line 46, in save_book
return _save_any(source, book)
File "C:\Python27\lib\site-packages\pyexcel\sources\__init__.py", line 50, in _save_any
source.write_data(instance)
File "C:\Python27\lib\site-packages\pyexcel\sources\file_source_output.py", line 58, in write_data
**self._keywords)
File "C:\Python27\lib\site-packages\pyexcel\renderers\_excel.py", line 25, in render_book_to_file
save_data(file_name, book.to_dict(), **keywords)
File "C:\Python27\lib\site-packages\pyexcel_io\io.py", line 75, in save_data
**keywords)
File "C:\Python27\lib\site-packages\pyexcel_io\io.py", line 96, in store_data
writer.write(data)
File "C:\Python27\lib\site-packages\pyexcel_io\book.py", line 161, in write
sheet_writer = self.create_sheet(sheet_name)
File "C:\Python27\lib\site-packages\pyexcel_xls\xls.py", line 206, in create_sheet
return XLSheetWriter(self.work_book, None, name)
File "C:\Python27\lib\site-packages\pyexcel_io\sheet.py", line 139, in __init__
self.set_sheet_name(sheet_name)
File "C:\Python27\lib\site-packages\pyexcel_xls\xls.py", line 156, in set_sheet_name
self._native_sheet = self._native_book.add_sheet(name)
File "C:\Python27\lib\site-packages\xlwt\Workbook.py", line 368, in add_sheet
raise Exception("invalid worksheet name %r" % sheetname)
Exception: invalid worksheet name u'product list - week.csv'
[Finished in 0.3s with exit code 1]
如何糾正它們? 謝謝。
文件名中將包含一些無效的char。您可以修改以下代碼:
import re
from pyexcel.cookbook import merge_all_to_a_book
import glob
import os
def checkNameValid(name=None):
if name is None:
print("name is None!")
return
reg = re.compile(r'[\\/:*?"<>|\r\n]+')
valid_name = reg.findall(name)
if valid_name:
for nv in valid_name:
name = name.replace(nv, "_")
return name
folder = "C:\\CSV\\"
final_folder = "C:\\XLS\\"
root, dirs, files = os.walk(folder).next()
for path, subdirs, files in os.walk(root):
for f in files:
if f.endswith(".csv"):
merge_all_to_a_book(glob.glob(folder + f), final_folder + checkNameValid(f) + ".xls")
突然發現它在XLSX上工作正常,但在XLS上卻不行,即將最后一行更改為:
merge_all_to_a_book(glob.glob(folder + f), final_folder + f + ".xls")
至:
merge_all_to_a_book(glob.glob(folder + f), final_folder + f + ".xlsx")
文件全部成功轉換。 僅警告消息:
C:\Python27\lib\site-packages\openpyxl\workbook\child.py:99: UserWarning: Title is more than 31 characters. Some applications may not be able to read the file
warnings.warn("Title is more than 31 characters. Some applications may not be able to read the file")
編輯:在Excel中手動打開時,上面轉換的XLSX有一些問題,因為“某些內容丟失了”。 等等
實際的問題在於文件名的長度。 縮短原始文件名后,該代碼可以很好地將CSV轉換為可用的XLS文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.