NPOI无需Office COM组件且不依赖Office,使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。
被人称为操作EXCEL的终极方案,例子如下:
ITable pXbTable = XYGlobalVariable.ZDBAdoWorkspace.OpenTable(XYTableDeclare.c_ZCPG_XB_PY_AFTERINVESTIGATE);
DataTable pXBTable = pXbTable.GetDataTable(new QueryFilter() { WhereString = "XMBH='" + cmbXMBH.SelectedValue.ToString() + "'", AddCaptionField = true });
RowBase pRowXM = XYGlobalVariable.ZDBAdoWorkspace.OpenTable(XYTableDeclare.c_XMJBXX_TableName).GetEntity<RowBase>(new QueryFilter() { WhereString = string.Format("XMBH ='{0}'", cmbXMBH.SelectedValue.ToString()) });
try
{
//将WorkBook指到我们原本设计好的“林木资产评估结果明细表.xls”
string xlsPath_LM = System.Windows.Forms.Application.StartupPath + "\\Temp\\林木资产评估结果明细表.xls";
IWorkbook wb_LM = new HSSFWorkbook(new FileStream(xlsPath_LM, FileMode.Open));
//设定要使用的Sheet为第0个Sheet
ISheet TempSheet_LM = wb_LM.GetSheetAt(0);
int StartRow = 4;
//pXBTable为Query回来的资料
for (int i = 0; i < pXBTable.Rows.Count; i++)
{
//获取"林木"单元格并赋值
TempSheet_LM.GetRow(StartRow + i).Cells[0].SetCellValue(Convert.ToString(pRowXM["ZL"]));
TempSheet_LM.GetRow(StartRow + i).Cells[1].SetCellValue(Convert.ToString(pXBTable.Rows[i]["XBH"]));
if (!string.IsNullOrEmpty(pXBTable.Rows[i]["XBMJ"].ToString()))
{ TempSheet_LM.GetRow(StartRow + i).Cells[2].SetCellValue(Convert.ToDouble(pXBTable.Rows[i]["XBMJ"])); }
TempSheet_LM.GetRow(StartRow + i).Cells[3].SetCellValue(Convert.ToString(pXBTable.Rows[i]["YSSZ_DESC"]));
TempSheet_LM.GetRow(StartRow + i).Cells[5].SetCellValue(Convert.ToString(pXBTable.Rows[i]["LZU_DESC"]));
if (!string.IsNullOrEmpty(pXBTable.Rows[i]["GQXJ"].ToString()))
{ TempSheet_LM.GetRow(StartRow + i).Cells[6].SetCellValue(Convert.ToDouble(pXBTable.Rows[i]["GQXJ"])); }
if (!string.IsNullOrEmpty(pXBTable.Rows[i]["XBXJ"].ToString()))
{ TempSheet_LM.GetRow(StartRow + i).Cells[7].SetCellValue(Convert.ToDouble(pXBTable.Rows[i]["XBXJ"])); }
if (!string.IsNullOrEmpty(pXBTable.Rows[i]["LMGQPGZ"].ToString()))
{ TempSheet_LM.GetRow(StartRow + i).Cells[8].SetCellValue(Convert.ToDouble(pXBTable.Rows[i]["LMGQPGZ"])); }
if (!string.IsNullOrEmpty(pXBTable.Rows[i]["XBLMPGZ"].ToString()))
{ TempSheet_LM.GetRow(StartRow + i).Cells[9].SetCellValue(Convert.ToDouble(pXBTable.Rows[i]["XBLMPGZ"])); }
第一个Row要用Create的
//TempSheet.CreateRow(StartRow + i).CreateCell(0).SetCellValue(Convert.ToString(pXBTable.Rows[i][0]));
第二个Row之后直接用Get的
//TempSheet.GetRow(StartRow + i).CreateCell(1).SetCellValue(Convert.ToString(pXBTable.Rows[i][1]));
//TempSheet.GetRow(StartRow + i).CreateCell(2).SetCellValue(Convert.ToString(pXBTable.Rows[i][2]));
//TempSheet.GetRow(StartRow + i).CreateCell(3).SetCellValue(Convert.ToString(pXBTable.Rows[i][3]));
//TempSheet.GetRow(StartRow + i).CreateCell(4).SetCellValue(Convert.ToString(pXBTable.Rows[i][4]));
//TempSheet.GetRow(StartRow + i).CreateCell(5).SetCellValue(Convert.ToString(pXBTable.Rows[i][5]));
//TempSheet.GetRow(StartRow + i).CreateCell(6).SetCellValue(Convert.ToString(pXBTable.Rows[i][6]));
//TempSheet.GetRow(StartRow + i).CreateCell(7).SetCellValue(Convert.ToString(pXBTable.Rows[i][7]));
//TempSheet.GetRow(StartRow + i).CreateCell(8).SetCellValue(Convert.ToString(pXBTable.Rows[i][8]));
//TempSheet.GetRow(StartRow + i).CreateCell(9).SetCellValue(Convert.ToString(pXBTable.Rows[i][9]));
//TempSheet.GetRow(StartRow + i).CreateCell(10).SetCellValue(Convert.ToString(pXBTable.Rows[i][10]));
//TempSheet.GetRow(StartRow + i).CreateCell(11).SetCellValue(Convert.ToString(pXBTable.Rows[i][11]));
//TempSheet.GetRow(StartRow + i).CreateCell(12).SetCellValue(Convert.ToString(pXBTable.Rows[i][12]));
}
//将文档写到指定位置
using (FileStream file_LM = new FileStream(strExcelFileName + "\\林木资产评估结果明细表.xls", FileMode.Create))
{
wb_LM.Write(file_LM);
file_LM.Close();
file_LM.Dispose();
}
}
catch (Exception ex)
{
string a = ex.ToString();
}