度量快速开发平台-专业、快速的软件定制快开平台

标题: 将DataTable中的数据导出到Excel [打印本页]

作者: 张兴康    时间: 2020-6-8 15:39
标题: 将DataTable中的数据导出到Excel
将数据库的表数据存放在DataTable中,然后通过DataTable将数据导出到Excel中进行存放。

    其中DataTable的定义如下:

//数据库连接

stringconnString = "Data Source=" + sqlServer.serverName + ";InitialCatalog=" + sqlServer.dataName + ";User ID=" + sqlServer.loginName+ "assword=" + sqlServer.loginPwd;

    //通过SqlConnection进行数据库的连接

SqlConnection sqlConn = new SqlConnection(connString);

    sqlConn.Open();

     //定义查询语句

    string outStr = "select* from table06";

// DataAdapter对象在DataSet与数据之间起桥梁作用,用于检索和保存数据

    SqlDataAdapter sda = new SqlDataAdapter(outStr,sqlConn);

    //使用DataSet进行数据读取

DataSet ds = new DataSet();

//通过DataAdapter对DataSet数据进行填充,table06是自定义的虚拟表名,调用select进行填充table06

    sda.Fill(ds, "table06");//table06为虚拟表名,是否可以定义为别的表名?

//用DataSet的虚拟表table06对DataTable进行数据填充

     System.Data.DataTabledt06 = ds.Tables["table06"];



通过DataTable获取到数据之后便可以通过自定义函数DataTabletoExcel进行数据的导出,将DataTable的数据导出到Excel中

具体代码如下:



/*

*函数名:DataTabletoExcel

*函数说明:将DataTable中的数据导出到Excel

*函数参数说明:

* tmpDataTable为存放需要导出的数据的DataTable

* savePath是导出文件需要保存的路径及文件名

*/

private void DataTabletoExcel(System.Data.DataTable tmpDataTable,stringsavePath)

       {

            if(tmpDataTable == null)

                return;

            introwNum = tmpDataTable.Rows.Count;//需要导出的数据的行数

            intcolumnNum = tmpDataTable.Columns.Count;//需要导出的数据的列数

            introwIndex = 1;//起始行为第二行

            intcolumnIndex = 0;//起始列为第一列

            Microsoft.Office.Interop.Excel.Range range;//Excel的格式设置

            System.Reflection.Missing miss = System.Reflection.Missing.Value;



            Microsoft.Office.Interop.Excel.Application xlApp =newMicrosoft.Office.Interop.Excel.ApplicationClass();



            xlApp.DisplayAlerts = true;// 在程序执行过程中使出现的警告框显示

            xlApp.SheetsInNewWorkbook = 1;



            Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);



            foreach(DataColumn dcintmpDataTable.Columns)            //将datatable的列名导入excel表的第一行

            {

                columnIndex ++;

                xlApp.Cells[rowIndex,columnIndex] = dc.ColumnName;

            }



         //将数据写入到Excel表中

            for(int i = 0; i < rowNum; i++)

            {

                rowIndex++;

                columnIndex = 0;

                for(int j = 0; j < columnNum; j++)

                {//按行写入数据

                    columnIndex++;

                    range =(Microsoft.Office.Interop.Excel.Range)xlApp.Cells[rowIndex,columnIndex];

                    range.NumberFormatLocal = "@";//写入到表中的数据格式以文本形式存在

                    xlApp.Cells[rowIndex,columnIndex] = tmpDataTable.Rows[j].ToString();

                }

            }

      //数据保存

            xlBook.SaveAs(savePath,miss,miss,miss,miss,miss,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,miss,miss,miss,miss,miss);

    xlBook.Close(false,miss,miss);

    xlApp.quit();

       }

作者: 张兴康    时间: 2020-6-8 15:40

作者: fteair    时间: 2020-6-8 17:34





欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://bbs.delit.cn/) Powered by Discuz! X3.2