我工作的地方有几百个xlsx文件(使用Office 2010 Starter创建),我需要从中提取信息。这只是一次性工作,所以问题是哪种方式最快。现有工具?编写解决方案?
信息只是字符串,格式无关紧要。这些文件包含客户数据。每个客户一个文件。在你问之前,是的,这是一个愚蠢的系统 - 我们正在放弃它。由于我们现在正在迁移到新系统,因此我们需要将现有客户数据导出到可以在新系统中导入的CSV文件中。
如果我要编写一个计算机程序来执行此操作,我需要能够访问每个文件中的第一个工作表,并能够读取任何给定单元格(A1,C5等)的内容。就是这样。
由于xlsx文件只是一些压缩的XML文件,因此一种方法是编写解压缩和解析XML文件的代码。这听起来像是一个非常耗时的解决方案,所以如果存在,我宁愿使用免费的库。
在这里可能有用的语言中,我最擅长C ++和C,但是做了一些C#,VB6和VB.NET,以及一点点Python。
答案 0 :(得分:4)
如果尚未将所有Excel文件放在一个文件夹中,请按以下步骤操作:
<强>码强>
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;