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