使用UseColumnDataType = false
ExcelDataReader 时,将单元格返回为System.Object
.
如果您需要System.String
返回,则需要克隆DataSet
结构,将每个DataColumn
's 的类型设置System.String
为随用随用,并用于为您DataTable.ImportRow()
进行所有转换System.String
。如果您需要更多地控制格式(例如:转换日期类型),您也可以显式地进行转换。
这是一个给你的例子......
// NuGet reference: ExcelDataReader v3.6.0 built from https://github.com/ExcelDataReader/ExcelDataReader/ExcelDataReader
// NuGet reference: ExcelDataReader.DataSet v3.6.0 built from https://github.com/ExcelDataReader/ExcelDataReader/ExcelDataReader.DataSet
using ExcelDataReader;
using System;
using System.Data;
using System.IO;
using System.Linq;
namespace Convert_IExcelDataReader_values_to_string
{
class MainClass
{
public static DataSet ReadExcelDataToDataSet(Stream fileStream)
{
DataSet excelDataSet;
using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(fileStream))
{
var dataSetConfiguration = new ExcelDataSetConfiguration()
{
UseColumnDataType = false
};
// This reads each Sheet into a DataTable and each column is of type System.Object
excelDataSet = reader.AsDataSet(dataSetConfiguration);
}
var stringDataSet = ConvertToDataSetOfStrings(excelDataSet);
return stringDataSet;
}
private static DataSet ConvertToDataSetOfStrings(DataSet sourceDataSet)
{
var result = new DataSet();
result.Tables.AddRange(
sourceDataSet.Tables.Cast<DataTable>().Select(srcDataTable =>
{
var destDataTable = new DataTable(srcDataTable.TableName, srcDataTable.Namespace);
// Copy each source column as System.String...
destDataTable.Columns.AddRange(
srcDataTable.Columns.Cast<DataColumn>()
.Select(col => new DataColumn(col.ColumnName, typeof(String)))
.ToArray()
);
// Implicitly convert all source cells to System.String using DataTable.ImportRow()
srcDataTable.Rows.OfType<DataRow>()
.ToList()
.ForEach(row => destDataTable.ImportRow(row));
return destDataTable;
})
.ToArray()
);
return result;
}
public static void Main(string[] args)
{
using (var stream = File.Open("TestOpenXml.xlsx", FileMode.Open, FileAccess.Read, FileShare.Read))
{
var dataSet = ReadExcelDataToDataSet(stream);
}
}
}
}
希望这可以帮助!