.NET Core使用NPOI的例子

NPOI是一个开源的C#读写Excel、Word等微软OLE2组件文档的项目,可以在没有安装Office或者相应环境的机器上对WORD/EXCEL文档进行读写。NPOI是构建在POI 3.x版本之上的,它支持.NET Core平台,并且提供了一些扩展功能和便利方法。

本文将介绍如何在.NET Core中使用NPOI进行Excel文档的读写操作,包括以下几个方面:

  • 读取Excel文件和Sheet

  • 修改单元格和行数据

  • 删除Sheet和行数据

  • 写入Excel文件和Sheet

  • 设置单元格样式和字体

一、读取Excel文件和Sheet

要读取Excel文件,首先需要引入NPOI相关的命名空间:

using NPOI.HSSF.UserModel; //HSSF用于操作Excel 2003以前(包括2003)的版本,扩展名为.xlsusing NPOI.XSSF.UserModel; //XSSF用于操作Excel 2007及以后版本,扩展名为.xlsxusing NPOI.SS.UserModel; //SS用于操作通用的Sheet对象

然后需要创建一个FileStream对象来打开要读取的Excel文件,并根据文件扩展名创建对应的Workbook对象:

//获取文件路径string filePath = @"D:\test.xlsx";
//获取文件扩展名string extensionName = System.IO.Path.GetExtension(filePath);
//创建文件流对象
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
//创建Workbook对象
IWorkbook workbook = null;
//根据扩展名判断是xls还是xlsx格式,并创建对应的HSSFWorkbook或XSSFWorkbook对象if (extensionName.Equals(".xls"))
{
    workbook = new HSSFWorkbook(fileStream); //2003版本或以下
}
elseif (extensionName.Equals(".xlsx"))
{
    workbook = new XSSFWorkbook(fileStream); //2007版本或以上
}
else 
{
    workbook = null;
}
fileStream.Close(); //关闭文件流对象

有了Workbook对象之后,就可以获取其中包含的Sheet对象了。有两种方式可以获取Sheet对象:

  • 通过索引获取:ISheet sheet = workbook.GetSheetAt(index); index表示第几个Sheet,从0开始。

  • 通过名称获取:ISheet sheet = workbook.GetSheet(name); name表示Sheet的名称。

如果要获取所有的Sheet对象,可以使用一个循环遍历Workbook中包含的所有Sheet:

//创建一个列表存储所有Sheet对象
List<ISheet> sheets = new List<ISheet>();
//获取Workbook中包含的Sheet数量int sheetCount = workbook.NumberOfSheets;
//遍历所有Sheet并添加到列表中for (int i = 0; i < sheetCount; i++)
{
    sheets.Add(workbook.GetSheetAt(i));
}

二、修改单元格和行数据

要修改单元格或行数据,首先需要获取要修改的单元格或行所在的位置。可以通过以下方式获取:

  • 获取指定位置的单元格:ICell cell = sheet.GetRow(rowNum).GetCell(cellNum); rowNum表示第几行,cellNum表示第几列,都从0开始。

  • 获取指定位置的行:IRow row = sheet.GetRow(rowNum); rowNum表示第几行,从0开始。

有了单元格或行对象之后,就可以对其进行修改了。修改单元格数据有两种方式:

  • 直接设置单元格值:cell.SetCellValue(value); value表示要设置的值

  • 使用单元格样式对象:cell.CellStyle = cellStyle; cellStyle表示要设置的样式对象,可以通过Workbook.CreateCellStyle()方法创建,并设置相关属性。

修改行数据有两种方式:

  • 修改行高:row.HeightInPoints = height; height表示要设置的行高

  • 修改行内单元格数据:row.GetCell(cellNum).SetCellValue(value); cellNum表示第几列,value表示要设置的值

例如,如果要修改第二个Sheet中第三行第四列的单元格值为“Hello”,并将该单元格的字体颜色设为红色,可以使用以下代码:

//获取第二个Sheet
ISheet sheet = workbook.GetSheetAt(1);
//获取第三行
IRow row = sheet.GetRow(2);
//获取第四列
ICell cell = row.GetCell(3);
//设置单元格值为“Hello”
cell.SetCellValue("Hello");
//创建一个字体对象
IFont font = workbook.CreateFont();
//设置字体颜色为红色
font.Color = HSSFColor.Red.Index;
//创建一个单元格样式对象
ICellStyle cellStyle = workbook.CreateCellStyle();
//将字体对象应用到单元格样式对象中
cellStyle.SetFont(font);
//将单元格样式对象应用到单元格中
cell.CellStyle = cellStyle;

三、删除Sheet和行数据

要删除Sheet或行数据,首先需要获取要删除的Sheet或行所在的位置。可以通过以下方式获取:

  • 获取指定位置的Sheet:ISheet sheet = workbook.GetSheetAt(index); index表示第几个Sheet,从0开始。

  • 获取指定位置的行:IRow row = sheet.GetRow(rowNum); rowNum表示第几行,从0开始。

有了Sheet或行对象之后,就可以对其进行删除了。删除Sheet有两种方式:

  • 通过索引删除:workbook.RemoveSheetAt(index); index表示第几个Sheet,从0开始。

  • 通过名称删除:workbook.RemoveName(name); name表示Sheet的名称。

删除行有两种方式:

  • 通过索引删除:sheet.RemoveRow(row); row表示要删除的行对象。

  • 通过移动其他行覆盖来实现删除效果: sheet.ShiftRows(startRow, endRow, n); startRow表示开始移动的起始行索引, endRow表示结束移动的结束行索引, n表示移动多少个位置(负数向上移动,正数向下移动)。

例如,如果要删除第一个Sheet中第五到第七行(包括),可以使用以下代码:

//获取第一个Sheet
ISheet sheet = workbook.GetSheetAt(0);
//遍历要删除的每一行,并调用RemoveRow方法for (int i = 4; i <= 6; i++)
{
    IRow row = sheet.GetRow(i);
    sheet.RemoveRow(row);
}

或者

//获取第一个Sheet
ISheet sheet = workbook.GetSheetAt(0);
//将第八行及以后的所有行向上移动三个位置,覆盖掉原来的第五到第七行,并清除最后三个空白行(可选)
sheet.ShiftRows(7, sheet.LastRowNum, -3);
for (int i = sheet.LastRowNum - 2; i <= sheet.LastRowNum; i++)
{
    IRow row = sheet.GetRow(i);
    if (row != null)
    {
        sheet.RemoveRow(row);
    }
}

四、写入Excel文件Sheet

要写入Excel文件和Sheet,首先需要创建一个Workbook对象,并根据文件扩展名创建对应的HSSFWorkbook或XSSFWorkbook对象:

//获取文件路径string filePath = @"D:\test.xlsx";
//获取文件扩展名string extensionName = System.IO.Path.GetExtension(filePath);
//创建Workbook对象
IWorkbook workbook = null;
//根据扩展名判断是xls还是xlsx格式,并创建对应的HSSFWorkbook或XSSFWorkbook对象if (extensionName.Equals(".xls"))
{
    workbook = new HSSFWorkbook(); //2003版本或以下
}
elseif (extensionName.Equals(".xlsx"))
{
    workbook = new XSSFWorkbook(); //2007版本或以上
}
else 
{
    workbook = null;
}

有了Workbook对象之后,就可以创建Sheet对象了。有两种方式可以创建Sheet对象:

  • 通过索引创建:ISheet sheet = workbook.CreateSheet(); 创建一个空白的Sheet,并返回该Sheet对象。

  • 通过名称创建:ISheet sheet = workbook.CreateSheet(name); name表示要给Sheet命名的名称。

如果要创建多个Sheet对象,可以使用一个循环遍历Workbook中包含的所有Sheet:

//定义一个数组存储要创建的Sheet名称string[] sheetNames = {"sheet1", "sheet2", "sheet3"};
//遍历数组并调用CreateSheet方法for (int i = 0; i < sheetNames.Length; i++)
{
    ISheet sheet = workbook.CreateSheet(sheetNames[i]);
}

五、设置单元格样式和字体

要设置单元格样式和字体,首先需要创建一个ICellStyle对象和一个IFont对象,并设置相关属性:

//创建一个单元格样式对象
ICellStyle cellStyle = workbook.CreateCellStyle();
//设置单元格水平居中对齐
cellStyle.Alignment = HorizontalAlignment.Center;
//设置单元格垂直居中对齐
cellStyle.VerticalAlignment = VerticalAlignment.Center;
//设置单元格背景颜色为黄色(注意需要同时设置FillForegroundColor和FillPattern属性)
cellStyle.FillForegroundColor = HSSFColor.Yellow.Index;
cellStyle.FillPattern = FillPattern.SolidForeground;
//设置单元格边框为细实线,并且颜色为黑色(注意需要分别设置上下左右四个方向的边框样式和颜色)
cellStyle.BorderTop= BorderStyle.Thin;
cellStyle.BorderBottom= BorderStyle.Thin;
cellStyle.BorderLeft= BorderStyle.Thin;
cellStyle.BorderRight= BorderStyle.Thin;
cellStyle.TopBorderColor= HSSFColor.Black.Index;
cellStyle.BottomBorderColor= HSSFColor.Black.Index;
cellStyle.LeftBorderColor= HSSFColor.Black.Index;
cellStyle.RightBorderColor= HSSFColor.Black.Index;

//创建一个字体对象
IFont font = workbook.CreateFont();
//设置字体为宋体,大小为12,加粗,颜色为红色,斜体,带下划线和删除线(注意需要分别设置各个属性)
font.FontName="宋体";
font.FontHeightInPoints=12;
font.IsBold=true;
font.Color=HSSFColor.Red.Index;
font.IsItalic=true;
font.Underline= FontUnderlineType.Single; 
font.IsStrikeout=true;

//将字体对象应用到单元格样式对象中(注意这一步是必须的,否则字体不会生效)
cellStyle.SetFont(font);

有了单元格样式和字体对象之后,就可以将其应用到具体的单元格中了。有两种方式可以应用单元格样式和字体:

  • 在创建单元格时直接指定:ICell cell = row.CreateCell(cellNum, CellType.String, cellValue, cellstyle); cellNum表示第几列, CellType表示单元格类型, cell

  • 在创建单元格之后再指定:cell.CellStyle = cellStyle; cell表示要设置的单元格对象,cellStyle表示要设置的样式对象。

例如,如果要给第一个Sheet中第一行第一列的单元格设置上面定义的样式和字体,可以使用以下代码:

//获取第一个Sheet
ISheet sheet = workbook.GetSheetAt(0);
//获取第一行
IRow row = sheet.GetRow(0);
//获取第一列
ICell cell = row.GetCell(0);
//将样式和字体应用到单元格中
cell.CellStyle = cellStyle;

六、写入Excel文件

要写入Excel文件,首先需要创建一个FileStream对象,并指定文件路径和模式:

//获取文件路径string filePath = @"D:\test.xlsx";
//创建文件流对象
FileStream fileStream = new FileStream(filePath, FileMode.Create);

有了FileStream对象之后,就可以调用Workbook的Write方法将Workbook内容写入到文件流中:

//将Workbook内容写入到文件流中
workbook.Write(fileStream);

最后,需要关闭文件流和Workbook对象:

//关闭文件流和Workbook对象
fileStream.Close();
workbook.Close();

这样就完成了对Excel文件的写入操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: .NET 可以使用 NPOI 来将 Word 文件转换为 PDF。 首先,你需要安装 NPOI 库。这可以通过在 Visual Studio 的包管理器控制台(PMC)中运行以下命令来完成: ``` Install-Package NPOI ``` 然后,你可以使用 NPOI 的 HWPFDocument 类读取 Word 文件,并使用 iTextSharp 库将它转换为 PDF。 下面是一个示例代码,展示了如何使用 NPOI 和 iTextSharp 将 Word 文件转换为 PDF: ```csharp using NPOI.HWPF.Extractor; using NPOI.HWPF.UserModel; using iTextSharp.text; using iTextSharp.text.pdf; using System.IO; // 读取 Word 文件 string wordFile = @"C:\temp\example.doc"; HWPFDocument doc = new HWPFDocument(new FileStream(wordFile, FileMode.Open)); // 使用 NPOI 读取文本内容 WordExtractor extractor = new WordExtractor(doc); string text = extractor.Text; // 使用 iTextSharp 创建 PDF 文件 string pdfFile = @"C:\temp\example.pdf"; using (FileStream fs = new FileStream(pdfFile, FileMode.Create)) { Document document = new Document(); PdfWriter writer = PdfWriter.GetInstance(document, fs); document.Open(); // 将文本内容写入 PDF document.Add(new Paragraph(text)); document.Close(); writer.Close(); } ``` 请注意,这是一个简单的示例,并未保留 Word 文件中的格式、图片等内容。如果你需要保留这些内容,可以使用其他库,例如 Aspose.Words 来完成转换。 ### 回答2: 使用NPOI将Word文件转换为PDF可以实现文档格式转换并且保持原有样式的一致性。在使用NPOI进行转换的过程中,需要采取以下步骤: 1. 引入NPOI库:首先在项目中安装NPOI库,然后在代码中引入相关的命名空间。 2. 打开Word文件:使用NPOI打开需要转换的Word文件,读取其中的内容。 3. 创建PDF文档:使用NPOI创建一个新的PDF文档。 4. 复制样式和内容:将Word文件中的样式和内容复制到PDF文档中。可以通过遍历Word文件中的各个段落、表格、图片等元素,并将其逐个复制到PDF文档中。 5. 设置文件属性:为PDF文档设置一些属性,如标题、作者、创建日期等。 6. 保存PDF文件:使用NPOI保存生成的PDF文档。 需要注意的是,NPOI是一个针对Office文件的.NET类库,可以处理Word、Excel、PowerPoint等文件格式的读写操作。在使用NPOI进行Word转PDF的过程中,我们需要选择合适的版本,并根据相关的文档进行调用。同时,由于NPOI的API较为复杂,对于一些特殊格式的Word文档,可能需要进行一些额外的处理。最后生成的PDF文件应该与原Word文件的格式基本一致。 总结而言,使用NPOI将Word文件转换为PDF可以实现文件格式的转换,并保持原有样式的一致性。但是需要根据具体的需求进行调用和处理,同时对NPOI库的使用要有一定的了解。 ### 回答3: 使用NPOI可以将Word文件转换为PDF。NPOI是一个开源库,用于在.NET平台上处理Microsoft Office文档,包括Word、Excel和PowerPoint。通过使用NPOI,我们可以读取、修改和创建各种Office文档。 要将Word文件转换为PDF,我们需要实现以下步骤: 1. 首先,我们需要将Word文件加载到内存中。可以使用NPOI的Word操作类来打开和读取Word文档。 2. 接下来,我们需要使用NPOI的PDF操作类来创建一个新的PDF文档。 3. 然后,我们需要将Word的内容逐一复制到PDF文档中。可以使用NPOI的XWPFParagraph和XWPFRun类来读取Word中的段落和文本内容,并将其添加到PDF文档中。 4. 最后,我们需要保存PDF文档到指定的路径。可以使用NPOI的PdfWriter类将PDF文档写入磁盘。 需要注意的是,NPOI对于一些复杂的Word文档可能无法完全支持,因为Word和PDF是不同的文件格式。在进行转换之前,最好先检查Word文档的内容和格式是否适用于转换。 总之,通过使用NPOI库,我们可以方便地将Word文件转换为PDF。这是一个快速、简单且可靠的方法,可以用于在.NET平台上处理Office文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

polsnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值