使用 C# oledbc 格式化电子表格
Formatting a spreadsheet using c# oledbc
我有一个电子表格,我想使用 C# 将其上传到 ASP.NET-MVC 工具中以提取数据,然后将它们放在 SQL 服务器数据库中。
我创建了一个将数据放入 DataSet 的函数,这样我就可以在将数据放入数据库后使用它。
函数如下:
public DataSet getData(HttpPostedFileBase file, string path)
{
var fileName = Path.GetFileName(file.FileName);
oledbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"");
DataSet ds = new DataSet();
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter oleda = new OleDbDataAdapter();
oledbConn.Open();
cmd.Connection = oledbConn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM [Worksheet0$]";
oleda = new OleDbDataAdapter(cmd);
oleda.Fill(ds);
oledbConn.Close();
return ds;
}
一切正常,但当我对数据集执行 foreach 并检索数据时,出现格式问题。
我的电子表格中的值被格式化为数字,因此例如 1.25 变成 1.3。该单元格显示 1.3,但当我单击它时,该值是 1.25。
当我检查我的数据集时,其中的值是格式化的(不是真实值),例如我有 1.3 而不是 1.25。
当我在上传前更改列格式时,一切正常!但我正在寻找一个自动过程来做到这一点。
我认为您应该尝试更改此库。我建议您使用 ExcelDataReader 2.1.2.3,这是它的 NuGet:https://www.nuget.org/packages/ExcelDataReader/
我用过这个库,它非常快,而且是轻量级的库。这是我的代码:
public List<Checklist> Provide()
{
List<Checklist> checklists = new List<Checklist>();
using (var reader = ExcelReaderFactory.CreateOpenXmlReader(m_Stream))
{
while (reader.Read())
{
Checklist checklist = new Checklist();
checklist.Description = reader.GetString(1);
checklist.View = reader.GetString(2);
checklist.Organ = reader.GetString(3);
checklists.Add(checklist);
}
return checklists;
}
}
感谢@Nadeem Khouri
我使用了 ExcelDataReaderLibrary
这是工作代码:
public DataSet getData(string path)
{
FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
DataSet result = excelReader.AsDataSet();
return result;
}
我有一个电子表格,我想使用 C# 将其上传到 ASP.NET-MVC 工具中以提取数据,然后将它们放在 SQL 服务器数据库中。
我创建了一个将数据放入 DataSet 的函数,这样我就可以在将数据放入数据库后使用它。
函数如下:
public DataSet getData(HttpPostedFileBase file, string path)
{
var fileName = Path.GetFileName(file.FileName);
oledbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\"");
DataSet ds = new DataSet();
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter oleda = new OleDbDataAdapter();
oledbConn.Open();
cmd.Connection = oledbConn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM [Worksheet0$]";
oleda = new OleDbDataAdapter(cmd);
oleda.Fill(ds);
oledbConn.Close();
return ds;
}
一切正常,但当我对数据集执行 foreach 并检索数据时,出现格式问题。
我的电子表格中的值被格式化为数字,因此例如 1.25 变成 1.3。该单元格显示 1.3,但当我单击它时,该值是 1.25。
当我检查我的数据集时,其中的值是格式化的(不是真实值),例如我有 1.3 而不是 1.25。
当我在上传前更改列格式时,一切正常!但我正在寻找一个自动过程来做到这一点。
我认为您应该尝试更改此库。我建议您使用 ExcelDataReader 2.1.2.3,这是它的 NuGet:https://www.nuget.org/packages/ExcelDataReader/ 我用过这个库,它非常快,而且是轻量级的库。这是我的代码:
public List<Checklist> Provide()
{
List<Checklist> checklists = new List<Checklist>();
using (var reader = ExcelReaderFactory.CreateOpenXmlReader(m_Stream))
{
while (reader.Read())
{
Checklist checklist = new Checklist();
checklist.Description = reader.GetString(1);
checklist.View = reader.GetString(2);
checklist.Organ = reader.GetString(3);
checklists.Add(checklist);
}
return checklists;
}
}
感谢@Nadeem Khouri
我使用了 ExcelDataReaderLibrary
这是工作代码:
public DataSet getData(string path)
{
FileStream stream = File.Open(path, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
DataSet result = excelReader.AsDataSet();
return result;
}