查询时忽略Excel格式

时间:2019-12-16 12:31:57

标签: c# excel winforms

使用C#,我正在从Excel导入一组数据。问题是Excel尝试通过提供字段格式来“帮助”。这导致我的应用程序显示不正确的数据。

例如,Excel中的列是“百分比”列。在这种情况下,“百分比”列用于存储完成率,但是除了百分比之外,它还可以具有“已完成”,“未开始”,“中止”之类的文本值。但是,当我在Excel工作表中加载时,百分比变成数字(100%变成1,50%变成0.5,依此类推),文本值变成空白。

是否有一种方法可以强制从excel文件中获取纯文本而忽略任何格式?

使用的代码是:

            string ExcelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + FileName + ";Extended Properties=Excel 12.0;";

            OleDbConnection_Excel = new OleDbConnection(ExcelConnectionString);
            OleDbConnection_Excel.Open();               
            Datatable_CheckSheet = OleDbConnection_Excel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

            if (Datatable_CheckSheet == null)
            {
                MessageBox.Show("No Data Found");
            }
            else
            {
                OleDbDataAdapter OleDbDataAdapter_FillCommand;
                DataTable DataTable_ExcelImport;

                OleDbDataAdapter_FillCommand = new OleDbDataAdapter("select * from [" + Datatable_CheckSheet.Rows[0]["TABLE_NAME"].ToString() + "]", OleDbConnection_Excel);
                DataTable_ExcelImport = new DataTable();
                OleDbDataAdapter_FillCommand.Fill(DataTable_ExcelImport);
                                    BindingSource BindingDataSource_ExcelView = new BindingSource
                {
                    DataSource = DataTable_ExcelImport
                };
                datagridview1.AutoGenerateColumns = false;
                datagridview1.DataSource = BindingDataSource_ExcelView;
            } 

1 个答案:

答案 0 :(得分:0)

由于Excel没有像其他数据库那样具有真正的架构,因此驱动程序查看数据的第一行以“猜测”该列的数据类型。如果数据的第一行都是数字,则它将整个列都视为数字。

将扩展属性 <soapenv:Header> <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:UsernameToken wsu:Id="UsernameToken-5094D0E1418B986BF215754539660332"> <wsse:Username>test</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">sqPh/Bap7ER6j+n+2iYlI+4Qt9A=</wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">1ROYkV/ZftvGi17KmsvgnQ==</wsse:Nonce> <wsu:Created>2019-12-04T10:06:06.032Z</wsu:Created> </wsse:UsernameToken> </wsse:Security> 添加到连接字符串中,以将所有数据视为文本(字符串):

IMEX=1

请注意,即使所有数据都是数字,这也会将所有列都视为字符串列,因此它可能需要您之前不需要的其他解析,但会阻止驱动程序