我正在开发一个MVC应用程序,用户可以上传excel文档并输出HTML,但我对Interop库有一些困难,希望有人可以提供帮助。
为了保持这个非常简单,我已经达到了一个阶段,我想要实例化或“新建”工作表并使用所选工作表的id。用户已选择他们希望使用的工作表,但似乎没有任何方法可以执行此操作。
我尝试了workbookModel.workbook.Sheets.get_Item(1);
这样的代码,它应该获取模型中的当前工作簿并获取id为1的工作表 - 我相信这是基于1的索引而不是基于0的索引。请记住,我在游戏中有一些viewModel因此在代码之上,但我在这里所做的只是Workbook work = new Workbook().Sheets.get_Item(1);
如果我错误地使用了工作表而不是工作表,我也尝试了Workbook work = new Workbook().Worksheets.get_Item(1);
,但我不相信。
但我尝试过的任何东西似乎都无法运作。
如果有人能指出我正确的方向,我会非常感激,如果这没有意义,你需要更多信息,请告诉我。
非常感谢
答案 0 :(得分:1)
首先,只有在运行excel应用程序时,Interop才有效。
所以,如果你没有运行它,你需要:
Application ExcelApp = new Application();
要从应用程序获取工作表,首先需要工作簿。 您可以使用以下方法之一获取工作簿:
//to get the first workbook of an application
Workbook MyBook = ExcelApp.Workbooks[1];
//to get a workbook by name
Workbook MyBook = ExcelApp.Workbooks["bookname"];
//to open a workbook from a xls file
Workbook MyBook = ExcelApp.Workbooks.Open(name and other parameters);
//to add a new workbook to the application
Workbook MyBook = ExcelApp.Workbooks.Add(optional template);
请注意,如果没有正在运行的应用程序,工作簿就不能存在,如果没有正在运行的应用程序中的父工作簿,则工作表也不能存在
要从工作簿中获取工作表,您需要进行转换,因为它来自as object
。
//to get an existing sheet
Worksheet MySheet = (Worksheet)MyBook.Worksheets["sheetname"];
//to create a new sheet
Worksheet MySheet = (Worksheet)MyBook.Worksheets.Add(some parameters);
但是,如果您可以设法从工作表中获取名称以使用链接填充视图,则可以存储这些工作表实例并将其传递给创建html的方法。 或者将它们存储在全局变量中。