0

我正在读取一个 xlsx 文件作为数据库来做一些工作

我注意到它以 int 和 date 的形式读取了一些字段,即使我只是希望它们都以文本的形式出现。有没有办法覆盖这个功能?

下面的代码

(随时指出我可以用我的代码做得更好的任何事情)

  private DataSet ExceltoDT(OpenFileDialog dialog)
    {
        try
        {
            string connst = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + dialog.FileName + ";Extended Properties=\"Excel 12.0 Xml;HDR=NO\";";
            string sheet = "Sheet1$";
            string strSQL = "SELECT * FROM [" + sheet + "]";
            //string Table = "081710";
            OleDbConnection xlsdb = new OleDbConnection(connst);
            xlsdb.Open();
            OleDbDataAdapter adp = new OleDbDataAdapter(strSQL, xlsdb);
            DataSet ds2 = new DataSet();
            adp.Fill(ds2);


            adp.Dispose();
            xlsdb.Close();
            xlsdb.Dispose();

            return ds2;
        }
        catch (StackOverflowException stack_ex2)
        {
            MessageBox.Show("(2007 Excel file) Stack Overflowed!" + "\n" + stack_ex2.Message);
            return null;

        }
        catch (OleDbException ex_oledb2)
        {
            MessageBox.Show("An OleDb Error Thrown!" + "\n" + ex_oledb2.Message);
            return null;
        }
    }
4

1 回答 1

1

'在每个单元格值前面添加一个(撇号)。这将告诉 Excel“将其视为文本,即使它看起来像数字/日期/任何内容”。

不是你想要的?然后不要使用 DB 连接器,因为它已严重损坏。您会注意到,当您有一列包含混合的单元格时。在这种情况下,数据库驱动程序将查看前 8 行并将类型设置为它找到的大多数类型,并为该列中不适合的任何内容返回 NULL。您可以通过破解您的注册表来解决此问题。

而是使用 OLE API 打开工作簿,然后从那里开始,逐行读取,根据需要转换数据(这个长长的帖子列表应该包含从 C# 访问 Excel 的所有可能方法以及所有错误和问题可以遇到)。

于 2010-08-27T14:40:25.037 回答