在窗口应用程序中,excel文件的第一列不读取oledb阅读器,excel文件数据不读取

本文关键字:文件 读取 excel 数据 一列 oledb 应用程序 窗口 | 更新日期: 2023-09-27 18:14:14

我面临使用oledb阅读器读取excel表格的问题,阅读器未返回第一列,最后显示列头F14,列为空。但是当我打开excel表格,双击标题行边框自动调整和自动调整大小保存excel并再次读取,然后所有列返回完美。

Excel表格,我尝试阅读生成使用php应用程序和下载Excel后,我们把我的应用程序从Excel读取数据,但上面的问题来了。

我已经做了很多研发工作,即使我在excel表格中给出宽度,同时使用web应用程序生成excel。我的代码是这样的

private bool Import_To_Grid(string FilePath, string Extension)
        {
            try
            {
                string conStr = "";
                switch (Extension)
                {
                    case ".xls": //Excel 97-03
                        conStr = ConfigurationManager.ConnectionStrings["Excel03ConString"]
                                 .ConnectionString;
                        break;
                    case ".xlsx": //Excel 07 and above
                        conStr = ConfigurationManager.ConnectionStrings["Excel07ConString"]
                                  .ConnectionString;
                        break;
                }
                conStr = String.Format(conStr, FilePath);
                OleDbConnection connExcel = new OleDbConnection(conStr);
                OleDbCommand cmdExcel = new OleDbCommand();
                OleDbDataAdapter oda = new OleDbDataAdapter();
                cmdExcel.Connection = connExcel;
                //Get the name of First Sheet
                connExcel.Open();
                Exceldt = new DataTable();
                DataTable dtExcelSchema;
                dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
                connExcel.Close();
                //Read Data from First Sheet
                connExcel.Open();
                cmdExcel.CommandText = "SELECT * From [" + SheetName + "]";
                oda.SelectCommand = cmdExcel;
                oda.Fill(Exceldt);
                connExcel.Close();
                //Bind Data to GridView
                dgv_showexcel.DataSource = Exceldt;
                BindDataToCmbClass(); //binddata to class for filter
                cmb_userclass.SelectedIndex = 0;
                return true;
            }
            catch (Exception ex) { MessageBox.Show("Its Error" + " " + ex.ToString()); return false; }
        }

Connection string
<add name="Excel03ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1';" />
<add name="Excel07ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';" />

在窗口应用程序中,excel文件的第一列不读取oledb阅读器,excel文件数据不读取

当我们下载或写入模式锁定第一个单元格时,我们需要在第一列和行默认位置设置IMEX=3。

我刚刚解决了同样的问题。也许能对别人有所帮助。

在我的例子中,excel文件包含一个列上的过滤器。因此,在读取文件时,获得命名为_xlnm#_FilterDatabase .

的隐藏表。

实际上我期望一个表,所以我正在查看模式表上的第一行。但是我得到了两张表其中一张是过滤表这张表不包含所有的列。所以我没有得到第一列

要解决这个问题,循环遍历模式并获得第一个不包含FilterDatabase的工作表名称。

代码会谈:

DataTable excelSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string sheetName = null;
for (int i = 0; i < dtExcelSchema.Rows.Count; i++)
{
    string tableNameOnRow = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();
    if (!tableNameOnRow.Contains("FilterDatabase"))
    {
       sheetName = tableNameOnRow; 
       break;
    }
 }
 OleDbDataAdapter da = new OleDbDataAdapter();
 DataSet ds = new DataSet(); cmdExcel.CommandText = "SELECT * From [" + sheetName + "]";