我在我的asp.net项目中将excel导入datatable。
我的代码如下:
string excelConString = string.Format(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};" +
"Extended Properties='Excel 8.0;" +
"IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text;'", filepath);
using (OleDbConnection connection = new OleDbConnection(excelConString))
{
connection.Open();
string worksheet;
worksheet = "Sheet 1$";
string connStr;
connStr = string.Format("Select * FROM `{0}`", worksheet);
OleDbDataAdapter daSheet = new OleDbDataAdapter(connStr, connection);
DataSet dataset = new DataSet();
DataTable table;
table = new DataTable();
daSheet.Fill(table);
dataset.Tables.Add(table);
connStr = string.Format("Select * FROM `{0}$`", worksheet);
table = new DataTable();
daSheet.Fill(table);
dataset.Tables.Add(table);
}
当我运行上面的代码以便导入excel时,最后的数据总是丢失,因为最后的数据有下面的特殊字符
“İ,Ö,Ş”等等。
我如何解决这个问题。我在下面添加了代码
"IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text;
然而它对我不起作用。
任何帮助将不胜感激。
谢谢
答案 0 :(得分:2)
如果有的话,请回答其他读者的问题。 如果您希望直接使用Excel文件处理POCO,建议使用我的工具 Npoi.Mapper ,这是一种基于约定的强类型对象和Excel数据之间的映射器,通过NPOI。
从Excel(XLS或XLSX)获取对象
var mapper = new Mapper("Book1.xlsx");
var objs1 = mapper.Take<SampleClass>("sheet2");
// You can take objects from the same sheet with different type.
var objs2 = mapper.Take<AnotherClass>("sheet2");
将对象导出到Excel(XLS或XLSX)
//var objects = ...
var mapper = new Mapper();
mapper.Save("test.xlsx", objects, "newSheet", overwrite: false);
将不同类型的对象放入内存工作簿并一起导出。
var mapper = new Mapper("Book1.xlsx");
mapper.Put(products, "sheet1", true);
mapper.Put(orders, "sheet2", false);
mapper.Save("Book1.xlsx");