Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C和Excel互操作获取Excel中占用单元格的范围_C#_Excel - Fatal编程技术网

C# 如何使用C和Excel互操作获取Excel中占用单元格的范围

C# 如何使用C和Excel互操作获取Excel中占用单元格的范围,c#,excel,C#,Excel,这是一个旧问题的后续问题: 引述该问题: 范围现在将是占用的单元格范围 分享|改进此答案于2009年8月18日9:03回答 祖尔布 它总是返回时间空白单元格,我想问题作者不想得到空白单元格 请参阅Range.SpecialCells方法。例如,要获取具有常量值或公式的单元格,请使用: 分享|改进此答案于2009年8月16日14:23回答 乔·埃里克森 回到我的问题上来。。。 我尝试使用此方法生成此异常: System.Runtime.InteropServices.COMException:“

这是一个旧问题的后续问题:

引述该问题:

范围现在将是占用的单元格范围 分享|改进此答案于2009年8月18日9:03回答 祖尔布

它总是返回时间空白单元格,我想问题作者不想得到空白单元格

请参阅Range.SpecialCells方法。例如,要获取具有常量值或公式的单元格,请使用:

分享|改进此答案于2009年8月16日14:23回答 乔·埃里克森

回到我的问题上来。。。 我尝试使用此方法生成此异常: System.Runtime.InteropServices.COMException:“范围类的SpecialCells方法失败”

这是我的密码:

using Excel = Microsoft.Office.Interop.Excel;  
using System.Reflection;

Excel.Application xlapp = new Excel.Application();  
Excel.Workbook wbook = xlapp.Workbooks.Open(tbxFilename.Text);  
Excel.Worksheet wsheet = wbook.Sheets[1];

Excel.Range range = wsheet.UsedRange;  
tbxOutput.AppendText($"UsedRange: Rows = {range.Rows.Count}, Cols `enter code here`= {range.Columns.Count}\r\n");  

range = wsheet.UsedRange.SpecialCells(Excel.XlCellType.xlCellTypeConstants |    // generates Exception  
   Excel.XlCellType.xlCellTypeFormulas, Missing.Value);  
tbxOutput.AppendText($"Rows = {range.Rows.Count}, Cols = {range.Columns.Count}\r\n");
我的代码有什么问题?
谢谢

您链接到的问题有几个答案,其中一个答案与抛出错误的代码相同。你在回答后读了评论吗?看起来,我假设在命令中用作“或”的条形“|”字符已被弃用,在较新版本的Excel中不再适用。假设条形“|”字符不再工作,那么您究竟要从工作表中选择什么,以及哪些内容没有按预期工作?对不起,我正在查看多年前保存的此线程的副本。我的错误是没有首先返回到活动线程。我试图在工作表中找到占用单元格的范围,即包含公式或常量的单元格。您遇到了什么问题?UsedRange将获取包含公式和常量的两个单元格。当然,您需要在单元格中循环,以查看哪些单元格是公式,哪些单元格是常量。我建议你编辑你的问题,具体说明你想要什么和什么不起作用。几乎所有提到其他问题的地方都没有帮助,所以去掉不必要的绒毛。说明你想做什么,你尝试了什么,什么没有按预期工作。关于如何在Excel工作表中获取占用单元格的范围,有很多问题。我认为这是一个众所周知的问题,UsedRange包括任何曾经被占用或格式化的单元格,即使它现在是空的。对于相对较小的工作表,UsedRange通常会返回100s或1000s的行和列。我看到很多问题都在抱怨这一点。这就是为什么我在寻找一种效果更好的方法。我不能在回复中包含太多信息,因为它将我限制在几百个字符以内。我知道UsedRange将按照您的描述执行,并可能返回许多“空”单元格。对于这些情况,我有一个答案……Interop的另一个问题是,如果工作表很大,那么Interop的速度会非常慢。您是否坚持使用互操作?还有其他第三方库没有这个问题,最好是IMHO。EPPlus是一种流行的选择。
_xlWorksheet.UsedRange.SpecialCells(  
  Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeConstants |  
        Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeFormulas)  
using Excel = Microsoft.Office.Interop.Excel;  
using System.Reflection;

Excel.Application xlapp = new Excel.Application();  
Excel.Workbook wbook = xlapp.Workbooks.Open(tbxFilename.Text);  
Excel.Worksheet wsheet = wbook.Sheets[1];

Excel.Range range = wsheet.UsedRange;  
tbxOutput.AppendText($"UsedRange: Rows = {range.Rows.Count}, Cols `enter code here`= {range.Columns.Count}\r\n");  

range = wsheet.UsedRange.SpecialCells(Excel.XlCellType.xlCellTypeConstants |    // generates Exception  
   Excel.XlCellType.xlCellTypeFormulas, Missing.Value);  
tbxOutput.AppendText($"Rows = {range.Rows.Count}, Cols = {range.Columns.Count}\r\n");