Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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#中迭代Excel工作表?_C#_Excel_Vsto - Fatal编程技术网

如何在C#中迭代Excel工作表?

如何在C#中迭代Excel工作表?,c#,excel,vsto,C#,Excel,Vsto,我有一个包含多张工作表的工作簿,我试图反复浏览它们,但这给我带来了问题。下面的代码抛出错误: Microsoft.Office.Tools.Excel.Worksheet'。此操作失败,因为对IID为“{297DC8D9-EABD-45A1-BDEF-68AB67E5C3C3}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT的异常:0x80004002(E_NOINTERFACE)) 但我真的不明白那是什么意思 尝试将“我的工作表”变量中的

我有一个包含多张工作表的工作簿,我试图反复浏览它们,但这给我带来了问题。下面的代码抛出错误:

Microsoft.Office.Tools.Excel.Worksheet'。此操作失败,因为对IID为“{297DC8D9-EABD-45A1-BDEF-68AB67E5C3C3}”的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT的异常:0x80004002(E_NOINTERFACE))

但我真的不明白那是什么意思

尝试将“我的工作表”变量中的第一个工作表(仅为工作簿)分配给工作表变量时出错

public List<Worksheet> GetAllDatasheets()
    {
        var datasheets = new List<Worksheet>();
        var sheets = _book;
        foreach (Worksheet sheet in sheets.Worksheets)
        {
            if (sheet.Name.StartsWith("$"))
                datasheets.Add(sheet);
        }
        return datasheets;
    }
public List GetAllDatasheets()
{
var数据表=新列表();
var表=_书;
foreach(工作表中的工作表。工作表)
{
if(sheet.Name.StartsWith($))
数据表。添加(表);
}
返回数据表;
}
编辑:以下是我的完整代码:

using Workbook = Microsoft.Office.Tools.Excel.Workbook;
using Worksheet = Microsoft.Office.Tools.Excel.Worksheet;

private Workbook _book;

    public ExcelObjectDAL()
    {
        _book = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook);
    }

public List<Worksheet> GetAllDatasheets()
    {
        var datasheets = new List<Worksheet>();
        var sheets = _book;
        foreach (var sheet in sheets.Worksheets)
        {
            var actualSheet = (Worksheet) sheet;
            if (actualSheet.Name.StartsWith("$"))
                datasheets.Add(actualSheet);
        }
        return datasheets;
    }
使用工作簿=Microsoft.Office.Tools.Excel.Workbook;
使用工作表=Microsoft.Office.Tools.Excel.Worksheet;
私人工作簿;
公共对象()
{
_book=Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook);
}
公共列表GetAllDatasheets()
{
var数据表=新列表();
var表=_书;
foreach(表中的var表。工作表)
{
var实际工作表=(工作表)工作表;
if(实际表.Name.StartsWith($))
添加数据表(实际数据表);
}
返回数据表;
}

我想这就是你想要的:

 public List<string> GetAllDatasheets()
        {
            Excel.Application excelApp = new Excel.Application();
            Excel.Workbook workBook = excelApp.Workbooks.Open(filePath);

            var datasheets = new List<string>();
            foreach (Excel.Worksheet sheet in workBook.Worksheets)
            {
                if (sheet.Name.StartsWith("$"))
                    datasheets.Add(sheet.Name);
            }

            excelApp.Quit();
            return datasheets;
        }

public List GetAllDatasheets()
{
Excel.Application excelApp=新的Excel.Application();
Excel.Workbook工作簿=excelApp.Workbooks.Open(文件路径);
var数据表=新列表();
foreach(工作簿.工作表中的Excel.Worksheet工作表)
{
if(sheet.Name.StartsWith($))
数据表.添加(表.名称);
}
excelApp.Quit();
返回数据表;
}

如果你有工作表名称,你知道的足够多,你就不必用键入工作表来列出清单

这是否回答了你的问题:?如果我理解正确,就不会。VSTO加载项甚至没有主方法,但我可能无法正确理解链接。我觉得这个链接正在做我想做的事情,但我失败了。你确定你在
列表中的工作表与
工作表的类型相同吗。工作表
(工作表)?我的专业领域更多的是Word,这意味着我不知道Excel“工具“记住对象,但我认为它可能无法提供
工作表。如果您强类型化了所有对象,而不是依赖
var
来考虑分配的数据类型,则可能会出现编译错误。使用
var
,这样的问题只会在运行时出现。我正在处理VSTO加载项,并通过Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveWorkbook)获取工作簿;-为什么我需要通过Excel.Application访问工作簿?此外,我还需要完整的工作表作为我的返回,因为调用方法是切换sheet.Visible属性的方法?