溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中如何使用NPOI實現Excel導入導出功能

發布時間:2022-02-21 14:44:13 來源:億速云 閱讀:445 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“C#中如何使用NPOI實現Excel導入導出功能”,內容詳細,步驟清晰,細節處理妥當,希望這篇“C#中如何使用NPOI實現Excel導入導出功能”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

Excel導入

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

C#中如何使用NPOI實現Excel導入導出功能

設置按鈕點擊事件,將文件路徑賦給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文件的導入導出功能到這里全部完成

讀到這里,這篇“C#中如何使用NPOI實現Excel導入導出功能”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女