逻辑是先将Excel内容转换为HTML字符串,然后再将HTML字符串转换为PDF文件。转换过程中的格式和样式可能会有一些差异,您可能需要根据需求进行进一步的调整和优化。
ISheet sheet,这个就是操作的sheet,这个以前说过了,这里不再重复
using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using System;using System.Collections;using System.Data;using System.IO;using System.Security.Cryptography;using System.Text;public class Office_NPOI{ #region 设置单元格样式 示例 //IWorkbook wk = myexcel.workbook(filename); //ICellStyle style = wk.CreateCellStyle();//创建样式 //style.VerticalAlignment = VerticalAlignment.Justify;//垂直居中 方法1 // style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CenterSelection;//设置居中 方法2 // //style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//设置居中 方法3 // ISheet sheet = myexcel.sheet(wk, 0); //IRow row = myexcel.row(sheet, 2); //ICell cell = myexcel.cell(row, 2); //cell.CellStyle = style; //myexcel.save(filename, wk); #endregion public class EXCEL { /// <summary> /// 将Excel中的数据导入DataTable中,空行会自动去掉 /// <para>--------------说明------------------</para> /// <para>DataTable dt = NPOI_Excel2DT_ByFileName("D:\\1.xlsx", "PP", true);</para> /// <para>------------------------------------</para> /// </summary> /// <param name="_ExcelFileName">Excel文件路径</param> /// <param name="_sheetinfo">Sheet信息,可以是索引或者列名,找不到时得到第一个sheet</param> /// <param name="_FirstRowisColumnName">Excel的第一行数据是不是列名</param> /// <returns></returns> public DataTable NPOI_Excel2DT_ByFileName(string _ExcelFileName, object _sheetinfo, bool _FirstRowisColumnName) { IWorkbook workbook = null; ISheet sheet = null; DataTable data = new DataTable(); int startRow = 0; try { workbook = NOPI_workbook(_ExcelFileName); sheet = NPOI_sheet(workbook, _sheetinfo); if (sheet != null) { IRow firstRow = sheet.GetRow(0); int cellbeginnum = firstRow.FirstCellNum; int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数 if (_FirstRowisColumnName) { for (int i = cellbeginnum; i < cellCount; ++i) { ICell cell = firstRow.GetCell(i); if (cell != null) { string cellValue = cell.StringCellValue; if (cellValue != null) { DataColumn column = new DataColumn(cellValue); data.Columns.Add(column); } } } startRow = sheet.FirstRowNum + 1; } else { DataColumn column = new DataColumn(); data.Columns.Add(column); startRow = sheet.FirstRowNum; } //最后一列的标号 int dtcolumncount = data.Columns.Count; int rowCount = sheet.LastRowNum; for (int i = startRow; i <= rowCount; ++i) { IRow row = sheet.GetRow(i); if (row == null) continue; //没有数据的行默认是null ArrayList al = new ArrayList(); for (int j = cellbeginnum; j < cellCount; ++j) { if (row.GetCell(j) != null) //同理,没有数据的单元格都默认是null al.Add(row.GetCell(j).ToString()); else al.Add(null); } DataRow dataRow = data.NewRow(); for (int j = 0; j < dtcolumncount; j++) { dataRow[j] = al[j]; } data.Rows.Add(dataRow); } } return data; } catch (Exception ex) { //处理民间常 return null; } } public IWorkbook NOPI_workbook(string _filename) { IWorkbook wk = null; using (var file = File.Open(_filename, FileMode.OpenOrCreate, FileAccess.Read)) { wk = new XSSFWorkbook(file); file.Close(); } return wk; } public ISheet NPOI_sheet(IWorkbook wk, object _sheetinfo) { ISheet sheet = null; if (_sheetinfo is int) { sheet = wk.GetSheetAt((int)_sheetinfo); } else { sheet = wk.GetSheet((string)_sheetinfo); } if (sheet == null) { sheet = wk.GetSheetAt(0); } return sheet; } }}