我使用OleDb从Excel文件中获得无效的工作表名称.你们# 39;年代错误的

本文关键字:你们 错误 工作 Excel OleDb 文件 无效 | 更新日期: 2023-09-27 18:17:51

我试着得到excel表格名称,与oledb。

我的连接字符串是:

"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$'' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior) at System.Data.OleDb.OleDbCommand.ExecuteReader() at PrestaImporter.Entity.Excel.ExecuteQuery(String query)

我使用OleDb从Excel文件中获得无效的工作表名称.你们# 39;年代错误的

应该可以了

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

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

"SELECT * FROM ["SHEET_NAME"$]"

使用不包含空格的工作表名称。例如我的床单:这是个糟糕的选择。