【问题标题】:Removing characteristic rows in a simple Excel file删除简单 Excel 文件中的特征行
【发布时间】:2014-09-11 05:19:31
【问题描述】:

我需要删除一个简单直接的 Excel 文件中的一些行。

例如,删除B列不为空的行。

我能想到的并不是真正的“删除”方式,而是重命名一个新创建的文件:

import os
import xlwt
from xlrd import open_workbook

old_file = open_workbook('C:\\file.xls',formatting_info=True)
old_sheet = old_file.sheet_by_index(0)

new_file = xlwt.Workbook(encoding='utf-8', style_compression = 0)
new_sheet = new_file.add_sheet('Sheet1', cell_overwrite_ok = True)

contents = []

for row in range(old_sheet.nrows):
    a = old_sheet.cell(row,0).value
    b = old_sheet.cell(row,1).value
    if len(b) < 1:
        contents.append(a)

for c, content in enumerate(contents):
    new_sheet.write(c, 0, content)


new_file.save('C:\\file_1.xls')

os.remove('C:\\file.xls')
os.rename('C:\\file_1.xls', 'C:\\file.xls')

好吧,这并不是真正删除行,但无论如何它可能是一种合适的方式。

有什么更好的方法可以做到这一点,比如考虑更多的条件?

【问题讨论】:

  • 你做对了。看到这个线程Python to delete a row in excel spreadsheet
  • 最终,这就是 Excel 本身所做的。没有“就地”“修改”文件之类的。这只是 Excel 用户界面造成的一种错觉。如果您在 Excel 中进行更改,然后按 Ctrl+S,它所做的就是删除旧文件,将其替换为具有相同名称的全新文件。

标签: python excel


【解决方案1】:

使用csv文件而不是xls文件更容易处理。

【讨论】:

    【解决方案2】:

    试试pyexcel:

    >>> import pyexcel
    >>> r=pyexcel.FilterableReader("mysample.xls")
    >>> keep_row_func = lambda row: row[1] == ''
    >>> r.filter(pyexcel.filters.RowValueFilter(keep_row_func))
    >>> pyexcel.utils.to_array(r)
    [111.0, '', 222.0, '', 444.0, '', 666.0, '', 777.0, '']
    >>> w=pyexcel.Writer("output.xlsx") # or output.ods, output.csv
    >>> w.write_reader(r)
    >>> w.close()
    

    通过pyexel,您可以在以下任何文件格式上使用上述脚本:ods、csv、xls、xlsx 和 xlsm。文档在这里:http://pythonhosted.org//pyexcel/

    【讨论】:

      【解决方案3】:

      纯 Python 库不适合使用 xls。我会通过两种方式来决定这个问题:

      1. Use COM interface
      2. 使用宏并将excel 称为external process

      您也可以考虑使用xlsxjythonApache POI

      【讨论】:

        猜你喜欢
        • 2015-04-07
        • 1970-01-01
        • 2015-08-16
        • 2014-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多