【问题标题】:Read Excel using OLEDB, some cell incorrectly read使用 OLEDB 读取 Excel,某些单元格读取错误
【发布时间】:2017-02-07 14:56:53
【问题描述】:

我正在尝试读取一个 excel 文件。一些单元格包含公式并被读取为“#REF!”。我只想要数字运算的单元格值,我不关心公式。有没有办法处理公式?我可以在 OLEDB 中执行此操作还是应该切换到互操作?提前致谢。

var connectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=NO;IMEX=1""", fileName);
string firstSheetName;
using (OleDbConnection con = new OleDbConnection(connectionString))
{
     con.Open();
     DataTable dt = con.GetSchema("Tables");
     firstSheetName = dt.Rows[0]["TABLE_NAME"].ToString();
}

var adapter = new OleDbDataAdapter("SELECT * FROM [" + firstSheetName + "]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "anyNameHere");
var data = ds.Tables["anyNameHere"];
string cellValue = (string)data.Rows[i].ItemArray[4];

我尝试将“TypeGuessRows=0;ImportMixedTypes=Text”添加到连接字符串。

var connectionString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0;HDR=NO;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text""", fileName);

这并没有帮助。

【问题讨论】:

    标签: c# excel oledb


    【解决方案1】:

    试试这个。不要使用 Get 架构,而是使用 getoledbschema。

            OleDbConnection connExcel = new OleDbConnection(conStr);
            OleDbCommand cmdExcel = new OleDbCommand();
            OleDbDataAdapter oda = new OleDbDataAdapter();
            DataTable dt = new DataTable();
            cmdExcel.Connection = connExcel;
    
            connExcel.Open();
            DataTable dtExcelSchema;
            dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            string SheetName=GettingSheetName(dtExcelSchema);
            connExcel.Close();
    
            //Read Data from First Sheet
            connExcel.Open();
            cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
            oda.SelectCommand = cmdExcel;
            oda.Fill(dt);
            connExcel.Close();
    

    【讨论】: