我正在Visual Studio 2019社区版中构建一个应用程序,以将Excel XLS文件转换为CSV。我找到了一些使用ExcelReader库的示例代码,并对其进行了修改,以便将XLS文件提取为test.csv文件。运行此程序时,我没有收到任何错误,但未创建文件。
这是为了帮助实现当前手动过程的自动化,我们必须手动打开XLS文件并将其另存为CSV。我正在使用Visual Studio Community Edition(2019),并添加了ExcelReader库。
'''public partial class Default2 : System.Web.UI.Page
{
static void Main() { }
DataSet result = new DataSet();
string filePath =
@"C:\Users\BEM26331\Documents\AppDevProjects\9.10.19.xls";
protected void UploadButton_Click(object sender, EventArgs e)
{
}
protected void Page_Load(object sender, EventArgs e)
{
FileStream stream = File.Open(filePath, FileMode.Open,
FileAccess.Read);
Excel.IExcelDataReader excelReader =
Excel.ExcelReaderFactory.CreateBinaryReader(stream);
DataSet result = excelReader.AsDataSet();
excelReader.Close();
result.Tables[0].TableName.ToString();
string csvData = "";
int row_no = 0;
int ind = 0;
while (row_no < result.Tables[ind].Rows.Count)
{
for (int i = 0; i < result.Tables[ind].Columns.Count; i++)
{
csvData += result.Tables[ind].Rows[row_no][i].ToString()
+ ",";
}
row_no++;
csvData += "\n";
}
string output =
@"C:\Users\BEM26331\Documents\AppDevProjects\test.csv";
StreamWriter csv = new StreamWriter(@output, false);
csv.Write(csvData);
csv.Close();
}
}'''
最终结果应创建相同的文件,但另存为CSV。实际输出不会创建任何文件。
也许是这样?:
public void ConvertToCSV(string sourceFile, string targetFile)
{
using (var stream = System.IO.File.Open(sourceFile, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
//add ExcelDataReader and ExcelDataReader.DataSet
//Reading from a OpenXml Excel file (2007 format; *.xlsx)
using (var reader = ExcelDataReader.ExcelReaderFactory.CreateOpenXmlReader(stream))
{
//DataSet result = reader.AsDataSet();
DataSet result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (_) => new ExcelDataTableConfiguration() { UseHeaderRow = true }
});
if (result.Tables.Count > 0)
{
System.Text.StringBuilder output = new StringBuilder();
DataTable table = result.Tables[0];
//save column names
output.AppendLine(String.Join(",", table.Columns.Cast<System.Data.DataColumn>().ToList()));
//save all rows
foreach (System.Data.DataRow dr in table.Rows)
{
output.AppendLine(String.Join(",", dr.ItemArray.Select(f=>f.ToString() ).ToList() ) );
}
System.IO.File.WriteAllText(targetFile, output.ToString());
}
}
}
}