首頁 > 軟體

C#使用NPOI實現Excel匯入匯出功能

2022-02-21 13:05:38

本文範例為大家分享了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檔案的匯入匯出功能到這裡全部完成

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com