需要从一个Excel文件生成多个文件

-1 投票
7 回答
6621 浏览
提问于 2025-04-15 13:21

我有一个Excel文件,里面有很多列。我需要用这个文件制作多个文件。

比如说,文件里有这样的数据:0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2。这些是Excel中的列,每列都有很多行。我需要一个文件,里面包含0 0 0 0 0 1 1 1 1 1 2,然后第二个文件只包含第二个数字的内容,比如0 0 0 0 0 1 1 1 1 1 2……以此类推,其他的也是这样。

感谢大家的回复。为了简化问题:

  1. 我有一个Excel文件,里面有很多列和行。列的名称是:

alt text http://img44.imageshack.us/img44/3397/84200961244pm.png

现在我需要把这个文件拆分成多个Excel文件,第一个文件会包含A到O列的所有行。第二个文件会包含A到N列和P列(这个文件不包含O列),其他的文件也是类似的。会有很多列包含2,我需要制作一个文件,里面包含所有包含O和1的列,每次两个,也就是说第一个文件包含前两个,第二个文件包含后两个,依此类推。

7 个回答

1

其他人也评论过,你的问题几乎完全让人看不懂。根据你描述问题的困难,建议你看看这篇帖子

这里有人建议把你的文件保存为CSV格式。将文件保存为CSV格式会大大简化解析的过程,但这样一来,从Excel格式转换回来就需要手动操作。如果你要处理的文件不多,这样做是可以接受的。但如果你有几百个文件,那就不太好用了。

Spreadsheet::ParseExcelSpreadsheet::WriteExcel这两个模块可以帮助你以原生格式读取和写入电子表格文件。

Text::CSV_XS模块为perl提供了一个强大且快速的CSV解析器。

2

使用Python和xlrd & xlwt这两个库。可以查看这个网站:http://www.python-excel.org

下面的代码应该可以满足你的需求:

import xlrd, xlwt, sys

def raj_split(in_path, out_stem):
    in_book = xlrd.open_workbook(in_path)
    in_sheet = in_book.sheet_by_index(0)
    first_row = in_sheet.row_values(0)
    # find the rightmost 1 value in the first row
    split_pos = max(
        colx for colx, value in enumerate(first_row) if value == 1.0
        ) + 1
    out_book = xlwt.Workbook()
    out_sheet = out_book.add_sheet("Sheet1", cell_overwrite_ok=True)
    # copy the common cells
    for rowx in xrange(in_sheet.nrows):
        row_vals = in_sheet.row_values(rowx, end_colx=split_pos)
        for colx in xrange(split_pos):
            out_sheet.write(rowx, colx, row_vals[colx])
    out_num = 0
    # for each output file ...
    for out_col in range(split_pos, in_sheet.ncols):
        out_num += 1
        # ... overwrite the `split_pos` column
        for rowx, value in enumerate(in_sheet.col_values(colx=out_col)):
            out_sheet.write(rowx, split_pos, value)
        # ... and save the file.
        out_book.save("%s_%03d.xls" % (out_stem, out_num))

raj_split(*sys.argv[1:3])
6

你可以使用 Spreadsheet::ParseExcel 这个工具来读取电子表格。不过,老实说,我只能帮你到这里,因为你描述的问题让我有点搞不清楚。

撰写回答