使用 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;
}