c# - 我使用 OleDb 从 Excel 文件中获取无效的工作表名称。怎么了?

标签 c# oledb

我尝试使用 oledb 获取 excel 工作表名称。

我的连接字符串是:

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
filepath + 
";Extended Properties=Excel 12.0;";

其中 filepath 是一个文件名。

我的代码:

List<string> sheetNames = new List<string>();
_excel.Connect(_path);
DataTable dataTable = _excel.ExecuteSchema();
_excel.Disconnect();
foreach (DataRow row in dataTable.Rows)
{
    string sheetName = row["TABLE_NAME"].ToString();
    if(!sheetName.EndsWith("$'")) { continue; }
    sheetNames.Add(sheetName);
 }

工作表名称列表包含所有有效的工作表名称和一些其他工作表名称。 示例:

  • "'correctsheetname$'"
  • "'correctsheetname$'Print_Area"

我只添加以 $' 结尾的工作表

我的问题是,如果工作表名称包含一个单引号,我会用两个单引号来获取它。

例子: 对于名为 asheetname's 的工作表,我得到 'asheetname''s$''

之后,当我尝试获取此工作表的数据源时,出现此工作表不存在的异常。

query = "SELECT * FROM ['asheetname''s$']"
_command = new OleDbCommand(query, _connection);
_dataTable = new DataTable();
_dataReader = _command.ExecuteReader();   <-- Exception is thrown here

异常信息:

{System.Data.OleDb.OleDbException: ''asheetname''s$'' 不是有效名称。确保它不包含无效字符或标点符号,并且它不会太长。 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult 小时) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象和 executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象和执行结果) 在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,Object& executeResult) 在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法) 在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior 行为) 在 System.Data.OleDb.OleDbCommand.ExecuteReader() 在 PrestaImporter.Entity.Excel.ExecuteQuery(字符串查询)

最佳答案

这应该可行

"SELECT * FROM [" + asheetname + "$]"

如果没有,请尝试将工作表名称手动输入到字符串变量 asheetname 中 - 它应该会打开。

"SELECT * FROM ["SHEET_NAME"$]"

关于c# - 我使用 OleDb 从 Excel 文件中获取无效的工作表名称。怎么了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8517774/

相关文章:

c# - 杀死由特定应用程序启动的 excel 进程

c# - MVC 4 - 将更改的值从 View 移交给 Controller

c# - 正则表达式:如何捕获重复捕获组中的所有迭代

c# - 使用继承模型进行实体拆分

c# - 应用程序在客户端上没有 MS Access 权限的情况下 Access 共享文件夹上的 mdb 文件

c# - 如何在vscode中调试cake项目?

c# - 简化 OleDbDataReader 代码

sql-server - 如何让一个数据库中的触发器通过链接服务器连接将数据插入到另一个数据库中

asp.net - System.Data.OleDb.OleDbException : Operation must use an updateable query

c# - 插入 Cast 数据和空字段 C# 时出错