我试着用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$'' 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)
答案 0 :(得分:4)
这应该有效
"SELECT * FROM [" + asheetname + "$]"
如果不能,请尝试手动将工作表名称键入字符串变量asheetname - 它应该打开。
"SELECT * FROM ["SHEET_NAME"$]"
答案 1 :(得分:0)
当我使用oledb阅读excel时,显示出错误请给出解决方案
'$'不是有效名称。确保它不包含无效字符或标点符号,并且不会太长。