消息关闭
    暂无新消息!
一个简单导出excel功能,我们首先根据自定义模板生成了有数据的Excel文档,然后打开Excel文件,打印Excel文档。
在导入自定义模板的时候进行了打印预览,预览的页数为1。可是当我们通过NPOI插入数据以后生成的Excel文档,进行打印预览却有30页之多,多出的都是一些空白页。
在网上搜索了一下,原因大概是有些没有内容的单元格里有遗留的格式等等吧,但由于上传的文档是由客户自己编辑的。所以不可能做出很严格的限制。那么就要在生成Excel的时候做一些控制了。NPOI里有控制打印区域的方法SetPrintAre();但是要使用这个方法必须知道生成的Excel里有内容的区域范围。以下是我自己写的方法:

/// <summary>
/// 设置打印区域
/// </summary>
/// <param name="workbook"></param>
private void SetPrintArea(IWorkbook workbook)
{
    int sheetCount = workbook.NumberOfSheets;
    for (int i = 0; i < sheetCount; i++)
    {
        ISheet sheet = workbook.GetSheetAt(i);
        int FirstRowNum = sheet.FirstRowNum;
        int LastRowNum = sheet.LastRowNum;
        int FirstCellNum = sheet.GetRow(FirstRowNum).FirstCellNum;
        int LastCellNum = sheet.GetRow(LastRowNum).LastCellNum;
        workbook.SetPrintArea(
            i,             //工作薄 下标0开始
            FirstCellNum,  //起始列 下标0开始
            LastCellNum,   //终止列 下标0开始
            FirstRowNum,   //起始行 下标0开始
            LastRowNum     //终止行 下标0开始
        );
    };
}

但这个方法并不能用,不能够准确的得到Excel里有内容部分的坐标。不知道大家有什么方法可以得到Excel里内容不为空的区域的坐标。如果有别的办法可以解决NPOI打印预览是出现很多空白页的方法也可以说一说。网上查了一下居然没有人提这个问题,难道很少人遇到吗?

1个回答

︿ 1
如果是Aspose.cells倒是有方法来删除空行和空列:
                    sheet.Cells.DeleteBlankRows();
                    sheet.Cells.DeleteBlankColumns();
NPOI就不知道了,如果没有的话自己写个循环来判断,为空就删除