在Excel工作表名称中使用散列符号(#)
我试图解决我在尝试使用OLE DB读取Excel文件时遇到的问题。 我发现问题是因为表名中有一个散列标记(#) 。
不幸的是,我不能重命名表。
所以经过一些尝试,我已经成功地通过添加引号(')来阅读完整的工作表:
之前
Select * from [" + sheetName + "$];
(工作)后
Select * from ['" + sheetName + "$'];
但是,当我试图从OLE DB特性中读取一个范围时,我就陷入了困境:
Select * from [" + sheetName + "$" + fromCell + ":" + toCell + "];
当我尝试发送这个命令时,它似乎被#
replace为.
然后它找不到该表。
我已经尝试了很多组合和转义代码,并没有find任何解决scheme。 我怎样才能访问这个文件?
你的最终输出应该是这样的
'MySheet$A1:B2'
所以你的select
应该是
var SheetName = "MySheet"; var fromCell = "A1"; var toCell = "B2"; var sql = "Select * from ['" + SheetName + "$" + fromCell + ":" + toCell + "']"; Console.WriteLine(sql); // Output // Select * from ['MySheet$A1:B2']
另外考虑参数化您的SQL更好的可读性,也防止SQL代码注入 。 你可以在OleDbCommand.Parametersfind一个指导。