日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C#使用NPOI實現Excel導入導出功能_C#教程

作者:惡勢力-從底層碼農開始 ? 更新時間: 2022-04-25 編程語言

本文實例為大家分享了C#使用NPOI實現Excel導入導出的具體代碼,供大家參考,具體內容如下

Excel導入

使用OpenFileDiolog控件和button結合,選擇文件導入,將路徑顯示在文本框

設置按鈕點擊事件,將文件路徑賦給textBox.Text

private void Department_SUM_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? OpenFileDialog open = new OpenFileDialog();
? ? ? ? ? ? open.ShowDialog();

? ? ? ? ? ? textBox1.Text = open.FileName;
? ? ? ? }

實現excel導入,通過textBox1.Text來獲取文件路徑

private void button_Excel_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ??
? ? ? ? ? ? FileStream fs = null;
? ? ? ? ? ? IWorkbook workbook = null;
? ? ? ? ? ? ISheet sheet = null;
? ? ? ? ? ? IRow row = null;
             String txtpath = textBox1.Text;
? ? ? ? ? ??
? ? ? ? ? ? fs = File.OpenRead(txtpath);
? ? ? ? ? ? workbook = new XSSFWorkbook(fs);

? ? ? ? ? ? if (workbook != null)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? sheet = workbook.GetSheetAt(0); //獲取excel表格的第一個sheet
? ? ? ? ? ? ? ? if (sheet != null)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ?? ?//行的LastRowNum是0~N-1
? ? ? ? ? ? ? ? ?? ?//列的LastCellNum是1~N
? ? ? ? ? ? ? ? ? ? int rowCount = sheet.LastRowNum;

? ? ? ? ? ? ? ? ? ? if (rowCount > 0)
? ? ? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? IRow firstrow = sheet.GetRow(0);
? ? ? ? ? ? ? ? ? ? ? ? int cellCount = firstrow.LastCellNum;
? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? ? for (int i = 0; i <= rowCount - 1; i++)
? ? ? ? ? ? ? ? ? ? ? ? {
//獲取行的第6和第7列數據,如果cell類型是文本,則通過StringCellValue取值
//如果cell類型是數值,則通過NumericCellValue來取值
? ? ? ? ? ? ? ? ? ? ? ? ? ? row = sheet.GetRow(i + 1);
? ? ? ? ? ? ? ? ? ? ? ? ? ?row.Cells[5].NumericCellValue;
?? ??? ??? ??? ??? ??? ?row.Cells[6].StringCellValue;
//可以將Cell的數據存放在list中,這里假設將兩列cell的數據存入list1,list2
? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? fs.Close();

? ? ? ? ? ? ? ? ? ? }
?? ??? ?//實際存放DataTable的位置

?? ??? ?//調用自定義方法,實現導出
?? ??? ?Add_DataTable_To_Excel(txtpath, table, sheet_name);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

要實現excel導出,先將程序中的excel存為DataTable格式
本段代碼存在于上面代碼“//實際存放DataTable的位置”位置

DataTable table = new DataTable();
? ? ? ? ? ? DataRow dr;

? ? ? ? ? ? table.Columns.Add("列名1", System.Type.GetType("System.String"));
? ? ? ? ? ? table.Columns.Add("列名2", System.Type.GetType("System.Double"));

? ? ? ? ? ? for (int i = 0; i < list4.Count; i++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? dr = table.NewRow();
? ? ? ? ? ? ? ? dr["列名1"] = list1i];
? ? ? ? ? ? ? ? dr["列名2"] = list2[i].ToString("0.0000"); //將存入的數據格式保存為保留四位小數
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? table.Rows.Add(dr);
? ? ? ? ? ? }

通過方法導出excel,傳參為文件路徑,DataTable,表名
通過獲取要導入數據的目標excel的內容,導入數據,要將excel導出的方式

public bool Add_DataTable_To_Excel(string output_file_path, DataTable dt, string sheet_name)
? ? ? ? {

FileStream fs = null;
? ? ? ? ? ? IWorkbook workbook = null;

? ? ? ? ? ? ISheet sheet = null;

? ? ? ? ? ? IRow row = null;
XSSFWorkbook xssfworkbook = null;

? ? ? ? ? ? ?fs = new FileStream(output_file_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

? ? ? ? ? ? xssfworkbook = new XSSFWorkbook(fs);
? ? ? ? ? ? sheet = xssfworkbook.GetSheet(sheet_name);

//設置馬上要使用的Cell數據格式
? ? ? ? ? ? IDataFormat dataformat = xssfworkbook.CreateDataFormat();

? ? ? ? ? ? ICellStyle style0 = xssfworkbook.CreateCellStyle();
? ? ? ? ? ? style0.DataFormat = dataformat.GetFormat("0.0000");

? ? ? ? ? ? ICellStyle style1 = xssfworkbook.CreateCellStyle();
? ? ? ? ? ? style1.DataFormat = dataformat.GetFormat("0.00%");

if (sheet != null)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? int rowCount = sheet.LastRowNum;

? ? ? ? ? ? ? ? if (rowCount > 0)
? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? IRow firstrow = sheet.GetRow(0);
? ? ? ? ? ? ? ? ? ? int cellCount = firstrow.LastCellNum;

for (int i = 0; i <= rowCount - 1; i++)
? ? ? ? ? ? ? ? ? ? {


? ? ? ? ? ? ? ? ? ? ? ? row = sheet.GetRow(i + 1);
? ? ? ? ? ? ? ? ? ? ? ? //表中有行為空,將空的行影響消除
? ? ? ? ? ? ? ? ? ? ? ? if (!"".Equals(row.Cells[code_index].StringCellValue))
? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? row = sheet.GetRow(i + 1);

? ? ? ? ? ? ? ? ? ? ? ? ? ? for (int j = 0; j <= dt.Rows.Count - 1; j++)
? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (row.Cells[code_index].StringCellValue.Equals(dt.Rows[j][0]))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {


? ?//遍歷將DataTable中的數據存入Cell的值 ? row.Cells[1].SetCellValue(Convert.ToDouble(dt.Rows[j][0].ToString()));
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?  row.Cells[1].CellStyle = style0;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?row.Cells[2].SetCellValue(Convert.ToDouble(dt.Rows[j][1].ToString()) / Convert.ToDouble(dt.Rows[j][1].ToString()));
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? row.Cells[2].CellStyle = style1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }


              }

 }

//導出excel
MemoryStream stream = new MemoryStream();
xssfworkbook.Write(stream);

? ?var buf = stream.ToArray();

? ? using (FileStream fss = new FileStream(txtpath, FileMode.Create, FileAccess.Write)) ? ? ? ?//保存為Excel文件
? ? ? ? ? ? {
? ? ? ? ? ? ? ? fss.Write(buf, 0, buf.Length);
? ? ? ? ? ? ? ? fss.Flush();
? ? ? ? ? ? }

? ? ? ? ? ? return true;
}

基礎的Excel文件的導入導出功能到這里全部完成

原文鏈接:https://blog.csdn.net/qq_48591625/article/details/108190904

欄目分類
最近更新