在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一个指导。