有没有一种简单的方法可以使用 OleDbConnection 删除/忽略 Excel 文件中列名上方的行?
Posted
技术标签:
【中文标题】有没有一种简单的方法可以使用 OleDbConnection 删除/忽略 Excel 文件中列名上方的行?【英文标题】:Is there an easy way to remove/ignore rows above column names in an Excel file using OleDbConnection? 【发布时间】:2017-11-05 14:48:03 【问题描述】:我有这样的代码用于读取 Excel 文件:
string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "数据源="+路径+";扩展属性=\"Excel 12.0;HDR=YES\";"; 使用 (OleDbConnection conn = new OleDbConnection(connStr)) conn.Open(); DataTable dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] null, null, null, "TABLE" ); 字符串 sheetName = dtSchema.Rows[0].Field("TABLE_NAME"); OleDbDataAdapter sheetAdapter = new OleDbDataAdapter("select * from [" + sheetName + "]", conn); sheetAdapter.Fill(sheetData); DataTable dtColumns = conn.GetSchema("Columns", new string[] null, null, sheetName, null ); ...
我的代码需要使用/查看列标题。以上仅在列标题是第一行时才有效。有时,我们从客户那里收到的 Excel 文件在列标题上方有几行,其中包含一些关于 Excel 中数据的元数据。发生这种情况时,列标题将位于第 10 行。
我可以打开 Excel 文件并手动删除列标题上方的多余行,这解决了问题。但我们想删除这个手动步骤。
是否有任何简单的方法可以删除/忽略列标题上方的这些额外的起始行?还是我必须想出自定义代码?我能想到的最好方法是关闭HDR
,然后每列中具有值的第一行就是列标题行。有没有更简单的方法?
【问题讨论】:
【参考方案1】:我有从 Excel 读取的代码,需要忽略工作表中的前 11 行,并从 A 到 P 列读取最多 64000 行。
// Read columns A - P after skipping 11 rows to read the header row
string ExcelDataQuery = string.Concat("SELECT * FROM [", sheetname, "A12:P64012]");
【讨论】:
【参考方案2】:据我所知(过去检查过该问题),如果标题未放在第 1 行中,则无法使用 SQL 查询从 excel 文件中选择带有 System.Data.OleDb
的表。我的解决方案(就像你做的那样)是在查询工作表之前删除标题行上方的所有行 - 只需打开带有Microsoft.Office.Interop
的工作簿,删除多余的行,关闭它而不是查询它。
Excel 是一个非常强大的工具,但从来没有被设计为像数据库一样工作(例如 SQL\访问文件)。
【讨论】:
这是非常不正确的。您可以指定单元格范围、列范围或命名范围作为FROM
子句的主题——请参阅here。以上是关于有没有一种简单的方法可以使用 OleDbConnection 删除/忽略 Excel 文件中列名上方的行?的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种简单的方法可以在 PostgreSQL 查询中使用变量? [复制]
有没有一种简单的方法可以将 Ajax 更改为 WebSocket?
有没有一种简单的方法可以使用 Deno.serveHttp 获取 IP 客户端?
有没有一种简单的方法可以使用 OleDbConnection 删除/忽略 Excel 文件中列名上方的行?