使用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;
}
答案 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
请注意,即使所有数据都是数字,这也会将所有列都视为字符串列,因此它可能需要您之前不需要的其他解析,但会阻止驱动程序