我尝试使用 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/