65.9K
CodeProject 正在变化。 阅读更多。
Home

将 .xlsx & .xls 转换为 .csv

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.04/5 (12投票s)

2011 年 9 月 13 日

CPOL

2分钟阅读

viewsIcon

276341

downloadIcon

28302

使用 C#.NET 进行简单的文件转换

引言

本文档介绍了如何使用 ExcelDataReader 库进行简单的文件转换,特别是 Excel 到 csv 的转换。轻松将您的 Excel 97-2003 (.xls) 或 2007 (.xlsx) 文件转换为简单的逗号分隔值文件 (.csv)。

CSV 文件更容易在程序中操作。

需求

作为一名初学者,我在程序中直接操作 Excel 文件时遇到了一些困难。因此我考虑这样做。

我遇到的一些问题包括无法获取适当的单元格、难以按行访问等。

由于 CSV 是一个简单的流文件,因此更容易处理文件数据。CSV 数据也可以被视为一个 Excel 表格。

工作

该项目基于 ExcelDataReader 库。

该项目的主要目标是 将 Excel 数据读取到程序中 并将其转换为易于操作的格式,即 CSV。

关于项目的运作

IExcelDataReader excelReader 

此对象允许我们操作 Excel 文件。

然后我们将整个 Excel 数据读取到 Dataset 中,该 Dataset 将被用于生成 CSV 文件。

DataSet result = excelReader.AsDataSet(); 

我在这里使用 Dataset 是因为从 dataset 的内容中获取值并写入以逗号分隔的矩阵形式的 CSV 文件非常容易。

用户友好的界面

image.jpg

  • 浏览要转换的输入 Excel 文件。
  • 浏览输出文件夹和文件名。
  • 点击“转换”按钮。

转换后的 CSV 文件将位于指定的输出文件夹中。

Using the Code

使用了 ExcelDataReader 库。预览中仅显示原型。在附带的源代码文件中获取完整代码。如果您在其他项目中使用此代码,请将 ExcelDataReader 库引用添加到您的项目中(引用已附带)。

FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);

// Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

// Reading from a OpenXml Excel file (2007 format; *.xlsx)
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);

// DataSet - The result of each spreadsheet will be created in the result.Tables
DataSet result = excelReader.AsDataSet();

// Free resources (IExcelDataReader is IDisposable)
excelReader.Close();

Excel 文件中的工作表成为 Dataset 中的表

result.Tables[0].TableName.ToString(); // to get first sheet name (table name)

使用上述代码,可以生成 CSV 文件。

string csvData = "";
int row_no = 0;

while (row_no < result.Tables[ind].Rows.Count) // ind is the index of table
				// (sheet name) which you want to convert to csv
   {
      for (int i = 0; i < result.Tables[ind].Columns.Count; i++)
          {
             csvData += result.Tables[ind].Rows[row_no][i].ToString() + ",";
          }
      row_no++;
      csvData  += "\n";
   }

生成 CSV 数据后,将其写入文件。

string output = filepath + filename + ".csv"; // define your own filepath & filename
StreamWriter csv = new StreamWriter(@output, false);
csv.Write(csvData);
csv.Close();

我感谢 ExcelDataReader 库的作者,它在完成我的项目方面提供了很大的帮助。

以下是 ExcelDataReader 的参考资料

© . All rights reserved.