如何让我的代码读取excel单元格前缀为' (撇号)

时间:2017-04-06 07:25:42

标签: c# excel oledb

不知道该怎么称呼这些字符串的数字?无论如何,你会写下绿色三角形的单元格如下:'3309

这是我的工作代码......

读取一个excel文件的架构,其模板稍后从组合框中选择(这里我使用了一个后台工作线程):

try
{
   OleDbcon =
        new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + IO_Name +
                             ";Extended Properties='Excel 12.0 Xml; HDR = Yes; IMEX = 1'");
    OleDbcon.Open();
    SD.DataTable dt = OleDbcon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
    OleDbcon.Close();
    MaxSchema = dt.Rows.Count;
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        String sheetName = dt.Rows[i]["TABLE_NAME"].ToString();
        sheetName = sheetName.Substring(0, sheetName.Length - 1);
        cmbSheets.Invoke((MethodInvoker)delegate {
            cmbSheets.Items.Add(sheetName);
        });
        backWorker2.ReportProgress(i);
    }
}
catch (Exception ex)
{
    MessageBox.Show("Write Excel: " + ex.Message);
}
finally
{
    GC.Collect();
    GC.WaitForPendingFinalizers();
    backWorker2.ReportProgress(100);
}

最后,我如何将数据带到datagridview:

private void cmbSheets_SelectedIndexChanged(object sender, EventArgs e)
{
        OleDbDataAdapter oledbDa = new OleDbDataAdapter("Select * from [" + cmbSheets.Text + "$]", OleDbcon);
    SD.DataTable dt = new SD.DataTable();
    oledbDa.Fill(dt);
    DGVExcel.DataSource = dt;
    lblItem.Text = DGVExcel.RowCount.ToString();
}

但是,我注意到以撇号为前缀的数据,将数字写成文本,根本不被读取,并被视为隐藏了。如何使我的方法可以读取字符串ified单元格?

我意识到这可能与我直接读取excel文件的架构这一事实有关,它可能自然会避免某些事情,如过滤器或excel特定的东西,包括我的字符串ified单元格。就我而言,我目前阅读它的方法非常有效,所以如果这个建议只是添加到当前的方法中会很好。

编辑我当前的连接字符串的扩展属性:

&#34 ;;扩展属性=&#39; Excel 12.0 Xml; HDR = NO; IMEX = 1; TypeGuessRows = 0; ImportMixedTypes = Text&#39;;&#34;);

0 个答案:

没有答案