从Excel xlsx文件中提取简单字符串的快速方法

时间:2012-06-01 15:53:58

标签: windows excel file excel-vba xlsx vba

我工作的地方有几百个xlsx文件(使用Office 2010 Starter创建),我需要从中提取信息。这只是一次性工作,所以问题是哪种方式最快。现有工具?编写解决方案?

信息只是字符串,格式无关紧要。这些文件包含客户数据。每个客户一个文件。在你问之前,是的,这是一个愚蠢的系统 - 我们正在放弃它。由于我们现在正在迁移到新系统,因此我们需要将现有客户数据导出到可以在新系统中导入的CSV文件中。

如果我要编写一个计算机程序来执行此操作,我需要能够访问每个文件中的第一个工作表,并能够读取任何给定单元格(A1,C5等)的内容。就是这样。

由于xlsx文件只是一些压缩的XML文件,因此一种方法是编写解压缩和解析XML文件的代码。这听起来像是一个非常耗时的解决方案,所以如果存在,我宁愿使用免费的库。

在这里可能有用的语言中,我最擅长C ++和C,但是做了一些C#,VB6和VB.NET,以及一点点Python。

3 个答案:

答案 0 :(得分:4)

如果尚未将所有Excel文件放在一个文件夹中,请按以下步骤操作:

  1. 打开空白工作簿
  2. 打开VBA编辑器 Alt + F11
  3. 添加模块:插入 - >模块
  4. 将以下代码添加到模块中(将目录字符串更改为指向要转换的Excel文件所在的目录)
  5. 逐步浏览几个文件以确保它正在按预期执行
  6. F5 在所有文件上运行
  7. 告别旧系统
  8. <强>码

        Option Explicit
    
        Sub ExportAllToCSV()
            Dim Directory As String
            Dim i As Long
            Dim file As String
            Directory = "C:\workbooks\"
            i = 1
    
            Application.DisplayAlerts = False
            Application.ScreenUpdating = False
    
            ' Get the first file
            file = Dir(Directory, vbReadOnly + vbHidden + vbSystem)
    
            Do While file <> ""
                If Right(file, 4) = "xlsx" Then ' change to right(file ,3) = "xls" if you have xls files instead of xlsx
                    Workbooks.Open Filename:=file
                    ActiveWorkbook.SaveAs Filename:="C:\workbooks\file" & i & ".csv", FileFormat _
                                :=xlCSV, CreateBackup:=False
                    ActiveWorkbook.Close
                    i = i + 1
                End If
    
                ' Get the next file
                file = Dir()
            Loop
    
            Application.DisplayAlerts = True
            Application.ScreenUpdating = True
        End Sub
    

答案 1 :(得分:0)

我建议使用Excel interop API。如何使用API​​的示例是here

答案 2 :(得分:0)

由于您提到可以使用C#,因此有一个出色的Excel 2007+文件库EPPlus。以下是一些可以帮助您入门的示例:

  ExcelPackage ep = new ExcelPackage(new FileInfo("excelfile.xlsx"));
  // take the first sheet 
  // or you could get the Worksheet with name : ep.Workbook.Worksheets["Sheet1"]
  ExcelWorksheet ws = ep.Workbook.Worksheets[0];

  // now you can get data
  // cell data from row 3, column 2 (first row or column is 1 not 0)
  string data = ws.Cells[3, 2].Value.ToString();
  // from A5 cell
  string data1 = ws.Cells["A5"].Value.ToString();

  // you can find out how many rows are there 
  int maxRow = ws.Dimension.End.Row;