如何在c#中使用NPOI XSSF将ISheet转换为CT_Worksheet

本文关键字:转换 ISheet CT Worksheet XSSF NPOI | 更新日期: 2023-09-27 17:54:20

我想设置Excel视图从NormalPageLayout。在Java (PIO)中有一个getCTWorksheet方法,但这个方法似乎不存在于c# NPOI实现中。

请建议一种方法从ISheet对象中获取CT_WorkSheet,并在Excel工作表中设置适当的视图。

下面是我当前如何在我直接创建的CT_Worksheet对象上设置正确的视图。

CT_Worksheet ct = new CT_Worksheet();
ct = (CT_Worksheet)sheet;
CT_Workbook wrkb = wbb.GetCTWorkbook();
CT_SheetView view = ct.sheetViews.GetSheetViewArray(0);
view.view = ST_SheetViewType.pageLayout;

如何在c#中使用NPOI XSSF将ISheet转换为CT_Worksheet

不幸的是,NPOI设计者将GetCTWorksheet()方法设置为内部,因此您不能在库外使用它。这可能也是POI开发人员的意图,但是Java没有包私有方法的概念。

由于似乎没有正式的方式来访问内部类,我们将只使用反射来访问它们。
var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet("Sheet 1");
var row = sheet.CreateRow(0);
row.CreateCell(0).SetCellValue("This is a test");
// Use reflection go call internal method GetCTWorksheet()
MethodInfo methodInfo = sheet.GetType().GetMethod("GetCTWorksheet", BindingFlags.NonPublic | BindingFlags.Instance);
var ct = (CT_Worksheet) methodInfo.Invoke(sheet, new object[] {});
CT_SheetView view = ct.sheetViews.GetSheetViewArray(0);
view.view = ST_SheetViewType.pageLayout;