簡體   English   中英

通過merge_all_to_a_book將Python,CSV轉換為XLS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM