1. 程式人生 > >C#利用NPOI逐行更新excel文件數據

C#利用NPOI逐行更新excel文件數據

C# NPOI 更新excel文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using System.IO;

namespace www.xinduofen.cn
{
class NpoiOperateExcel
{

/// <summary>
/// 逐列創建excel文件
/// </summary>


/// <param name="data">為將要保存的數據,list《string》代表一列數據,有多少個就代表有多列數據(所有列上對齊)</param>
/// <param name="save_address">代表excel表格將要保存的地址,包括"文件名.xls"</param>
/// <param name="start_row">代表數據保存的起始行(1,2,3.......65536)最多支持65536行</param>
/// <param name="sart_column">代表數據保存的起始列(1,2,3......256)最多支持256列</param>

/// <param name="worksheet_name">代創建的工作表的名字(此函數只能只能填充一個工作表的內容)</param>
/// <returns>返回 true 代表創建成功,否則為創建失敗</returns>
public static bool colCreate(List<List<string>> data, string save_address,
int start_row, int sart_column, string worksheet_name)//創建一個excel表格

{
FileStream file = null;

try
{
//如果傳入參數合法
if (data != null && !string.IsNullOrEmpty(save_address) && start_row > 0 && sart_column > 0)
{
string sheetName = "Sheet1";
if (!string.IsNullOrEmpty(worksheet_name))
{
sheetName = worksheet_name;
}
IWorkbook workbook = new HSSFWorkbook();//創建Workbook對象
ISheet sheet = workbook.CreateSheet(sheetName);//創建工作表1
workbook.CreateSheet("Sheet2");//創建工作表2
workbook.CreateSheet("Sheet3");//創建工作表3

int columnIndex = sart_column - 1;//初始化起始列索引
foreach (List<string> list in data)
{
int rowIndex = start_row - 1;//初始化起始行索引
foreach (string str in list)
{
IRow row = sheet.GetRow(rowIndex);
if (row == null)
{
row = sheet.CreateRow(rowIndex);//在工作表中添加一行
}
ICell cell = row.CreateCell(columnIndex);//在行中添加一列
cell.SetCellValue(str);//設置列的內容

rowIndex++;//行索引向後移動
}

columnIndex++;//列索引向後移動
}
if (!save_address.EndsWith(".xls"))
{
save_address += ".xls";
}
file = new FileStream(save_address, FileMode.Create);
workbook.Write(file);

return true;//創建成功
}
else
{
return false;//創建失敗
}
}
catch (Exception)
{
Console.WriteLine("NpoiOperateExcel.colCreate方法產生了異常!");
return false;//創建失敗
}
finally {
if (file != null) { file.Close(); }
}
}

/// <summary>
/// 逐行更新excel文件
/// </summary>
/// <param name="data">為將要保存的數據,list《string》代表一行數據,有多少個就代表有多行數據(所有行左對齊)</param>
/// <param name="save_address">代表將要更新的excel表格地址,包括"文件名.xls"</param>
/// <param name="start_row">代表數據更新的起始行(1,2,3.......65536)最多支持65536行</param>
/// <param name="sart_column">代表數據更新的起始列(1,2,3......256)最多支持256列</param>
/// <param name="sheet_number">代表將要更新的sheet表的索引位置</param>
/// <returns>返回 true 代表更新成功,否則為更新失敗</returns>
public static bool rowUpdate(List<List<string>> data, string save_address,
int start_row, int sart_column, int sheet_number)//更新excel表格
{
FileStream writefile = null;

try
{
//如果傳入參數合法
if (data != null && !string.IsNullOrEmpty(save_address) && start_row > 0 && sart_column > 0 && sheet_number > 0)
{
FileStream readfile = null;
HSSFWorkbook hssfworkbook = null;
ISheet sheet = null;

try
{
readfile = new FileStream(save_address, FileMode.Open, FileAccess.Read);
hssfworkbook = new HSSFWorkbook(readfile);
sheet = hssfworkbook.GetSheetAt(sheet_number-1);
}
catch (Exception)
{
Console.WriteLine("NpoiOperateExcel.rowUpdate方法加載被更新文件時產生了異常!");
}
finally
{
if (readfile != null) { readfile.Close(); }
}

if (sheet != null)
{
int rowIndex = start_row - 1;//初始化起始行索引
foreach (List<string> list in data)
{
IRow row = sheet.GetRow(rowIndex);
if (row == null)
{
row = sheet.CreateRow(rowIndex);//在工作表中添加一行
}

int columnIndex = sart_column - 1;//初始化起始列索引
foreach (string str in list)
{
ICell cell = row.GetCell(columnIndex);
if (cell == null)
{
cell = row.CreateCell(columnIndex);//在行中添加一列
}
cell.SetCellValue(str);//設置列的內容

columnIndex++;//列索引向後移動
}

rowIndex++;//行索引向後移動
}

writefile = new FileStream(save_address, FileMode.Create);
hssfworkbook.Write(writefile);

return true;//更新成功
}
else
{
return false;//更新失敗
}
}
else
{
return false;//更新失敗
}
}
catch (Exception)
{
Console.WriteLine("NpoiOperateExcel.rowUpdate方法產生了異常!");
return false;//更新失敗
}
finally {
if (writefile!=null) { writefile.Close(); }
}
}

}
}

內容所有權屬於:北京繼豪電子(公司專業研發體質測試儀器

C#利用NPOI逐行更新excel文件數據