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

时间:2016-07-04 06:43:08

标签: c# npoi

我想将Excel视图从普通设置为 PageLayout 。在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;

1 个答案:

答案 0 :(得分:2)

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

由于似乎没有正式的方法来访问内部类,我们只需使用 reflection 来访问它们。

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;