C#把dataTable中的數(shù)據(jù)寫入到excel中

話不多說我直接進(jìn)入正題,疫情期間先來無事,找點(diǎn)事做。
由于自己寫入2007版xlsx,總是出問題后來查到是.xlsx推薦用EPPLUS,xls推薦用NPOI,還以為自己代碼寫的有問題,氣死我了!??!

1.首先下載npoI組件,后引用對(duì)應(yīng)的命名空間,在Userball中。

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

2.創(chuàng)建一個(gè)類sqlhelper ,讀取dataTable的函數(shù)

      
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;

using System.Data.SqlClient;
using System.Data;
namespace sannCeng.DAL33
{
    class sqlHelper33
    {
        //獲取配置文件
      

        private static string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
        

        public static DataTable ExecuteQuery(string sql, params SqlParameter[] sqlParameters)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            using (SqlCommand cmd = conn.CreateCommand())
            {
                conn.Open();
                cmd.CommandText = sql;
                cmd.Parameters.AddRange(sqlParameters);
                DataTable dt = new DataTable();
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    dt.Load(reader);

                }

                return dt;
            }
        }


    }
}

3.創(chuàng)建一個(gè)實(shí)現(xiàn)類UserDal調(diào)用ExecuteQuery


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using sanCeng.Model33;
using System.Data;

namespace sannCeng.DAL33
{
    public class UserDal
    {
     
     

        public DataTable GetAll()
        {
            DataTable dataTable = sqlHelper33.ExecuteQuery("select * from T_users p where p.Isdeleted=0");
            return dataTable;
        }
    }
}

4.創(chuàng)建一個(gè)UserBll調(diào)用UserDal

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using sanCeng.Model33;
using sannCeng.DAL33;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.Data;
using System.IO;

namespace sanCeng.BLL33
{
    public class UserBll
    {
      
        private UserDal uDAL = new UserDal();
    
        public void GetAll()
        {
          
            DataTable tmpDataTable = uDAL.GetAll();
            string TargetFileNamePath = @"C:\Users\xg\Desktop\test.xls";//目標(biāo)文件excel的路徑
           // string sheetName;//excel表中的sheet的名稱,可以根據(jù)情況自己起

          
            int columnIndex = 0;

            int rowNum = tmpDataTable.Rows.Count;//總行數(shù)
            int columnNum = tmpDataTable.Columns.Count;//總列數(shù)


            if (tmpDataTable == null)
            {
                return;
            }
            // 數(shù)據(jù)驗(yàn)證
            if (!File.Exists(TargetFileNamePath))
            {
                //excel文件的路徑不存在
                throw new ArgumentException("excel文件的路徑不存在或者excel文件沒有創(chuàng)建好");
            }


            //根據(jù)Excel文件的后綴名創(chuàng)建對(duì)應(yīng)的workbook
            IWorkbook xlApp = null;
            if (TargetFileNamePath.IndexOf(".xlsx") > 0)
            {  //2007版本的excel
                xlApp = new XSSFWorkbook();
            }
            else if (TargetFileNamePath.IndexOf(".xls") > 0) //2003版本的excel
            {
                xlApp = new HSSFWorkbook();
            }




            //IWorkbook xlApp  = new XSSFWorkbook();

            //excel表的sheet名
            ISheet sheet = xlApp.CreateSheet("user");

            // ISheet sheet2 = xlApp.GetSheetAt(0);

            IRow row = sheet.CreateRow(0);
           //  int lastRowNumber = sheet.LastRowNum;

            foreach (DataColumn dc in tmpDataTable.Columns)
            {
               
                // row.GetRow(rowIndex).GetCell(columnIndex).SetCellValue();
                row.CreateCell(columnIndex).SetCellValue(dc.ColumnName.ToString());
                columnIndex++;
                //  row[rowIndex, columnIndex] = dc.ColumnName;
                // row[rowIndex, columnIndex] = dc.ColumnName;
            }


            //寫入數(shù)據(jù)
            for (int row1 = 1; row1 < tmpDataTable.Rows.Count; row1++)
            {
                //sheet表創(chuàng)建新的一行
                IRow newRow = sheet.CreateRow(row1);
                for (int column = 0; column < tmpDataTable.Columns.Count; column++)
                {
                    newRow.CreateCell(column).SetCellValue(tmpDataTable.Rows[row1][column].ToString());

                }
            }


            //寫入到excel中
            using (Stream fileStream = File.OpenWrite(TargetFileNamePath))
            {

                xlApp.Write(fileStream);
                fileStream.Close();
                
            }
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容