我正在阅读XLSX文件作为DB进行一些工作

我注意到它在int和date中阅读了一些feilds,即使我只希望所有内容都作为文本。无论如何是否可以覆盖此功能?

下面的代码

(随意指出我在代码中也可以做得更好的任何事情)

  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;
        }
    }
有帮助吗?

解决方案

添加一个 ' (撇号)在每个细胞值的前面。这将告诉Excel“即使看起来像一个数字/日期/任何东西,也将其视为文本”。

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

取而代 长篇文章清单 应包含大约访问C#加上所有可能遇到的错误和问题的所有可能方法)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top