zoukankan      html  css  js  c++  java
  • DataSet导入到Excel里,多个DataTable分成多个Sheet,Sheet以TableName命名

    方法体代码如下:

            #region  DataSet导入到Excel里,多个DataTable分成多个Sheet,Sheet以TableName命名(引用Microsoft.Office.Interop.Excel 11.0)
            /// <summary>
            /// DataSet导入到Excel里,多个DataTable分成多个Sheet,Sheet名以TableName命名
            /// </summary>
            /// <param name="DS">要导入的Excel</param>
            /// <param name="FilePathAndName">要保存的路径和文件名</param>
            public static void DataSetToExcel(DataSet DS, string FilePathAndName)
            {
                string strName = FilePathAndName.Replace(@"\\", @"\").Replace(@"\\", @"\").Replace(@"\\", @"\");
                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                try
                {
                    excel.Visible = false;
                    //设置禁止弹出保存和覆盖的询问提示框
                    excel.DisplayAlerts = false;
                    excel.AlertBeforeOverwriting = false;
                    //增加一个工作簿
                    Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Add(true);
                    System.Reflection.Missing miss = System.Reflection.Missing.Value;
                    //添加工作表
                    Microsoft.Office.Interop.Excel.Worksheet sheets = (Microsoft.Office.Interop.Excel.Worksheet)
                        book.Worksheets.Add(miss, miss, 19, Microsoft.Office.Interop.Excel.XlSheetType.xlWorksheet);
                    for (int i = 0; i < DS.Tables.Count; i++)
                    {
                        System.Data.DataTable table = DS.Tables[i];
                        //获取一个工作表
                        //Microsoft.Office.Interop.Excel.Worksheet sheet = book.Worksheets[i + 1] as Microsoft.Office.Interop.Excel.Worksheet;
    
                        Microsoft.Office.Interop.Excel.Worksheet sheet = book.Worksheets.Add(book.Worksheets[i + 1], Type.Missing, Type.Missing, Type.Missing) as Microsoft.Office.Interop.Excel.Worksheet;
                        int rowIndex = 1;
                        int colIndex = 0;
                        foreach (DataColumn col in table.Columns)
                        {
                            colIndex++;
                            sheet.Cells[1, colIndex] = col.ColumnName;
                        }
                        foreach (DataRow row in table.Rows)
                        {
                            rowIndex++;
                            colIndex = 0;
                            foreach (DataColumn col in table.Columns)
                            {
                                colIndex++;
                                sheet.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
                            }
                        }
                        //sheet.Name = tableNames[i];
                        sheet.Name = Common.GetLegalFileName(DS.Tables[i].TableName.ToString());
                    }
                    //删除多余Sheet
                    for (int g = 1; g <= book.Worksheets.Count; g++)
                    {
                        Microsoft.Office.Interop.Excel.Worksheet sheet = book.Worksheets[g] as Microsoft.Office.Interop.Excel.Worksheet;
    
                        if (sheet.Name.Length > 5 && sheet.Name.Substring(0, 5) == "Sheet")
                        {
                            sheet.Delete();
                            g--;
                        }
                    }
                    //book.Save();
                    book.SaveAs(strName, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, Type.Missing,
                        Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
                        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                    book.Close(false, miss, miss);
                    book = null;
                }
                catch (Exception)
                {
                    throw;
                }
                finally
                {
                    KillExcelProcess(excel);//结束Excel进程                
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                }
            }
    
            //using System.Runtime.InteropServices;
            [DllImport("user32.dll", SetLastError = true)]
            static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
    
            /// <summary>
            /// kill the excel.exe Process
            /// </summary>
            private static void KillExcelProcess(Microsoft.Office.Interop.Excel.Application _ApplicationClass)
            {
                try
                {
                    if (_ApplicationClass != null)
                    {
                        int lpdwProcessId;
                        GetWindowThreadProcessId(new IntPtr(_ApplicationClass.Hwnd), out lpdwProcessId);
                        System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill();
                    }
                }
                catch (Exception ex)
                {
                    //ErrorLogManager.Log("Kill Excel Process", ex.Source, ex.StackTrace);
    
                }
            }
    
            
    
            #endregion

    调用代码:

    ataSet ds = new DataSet();
    
                string sql = "select top 5  * from Table_Table1";
                SqlDbHelper db = new SqlDbHelper();
                ds.Tables.Add(db.GetDataTable(sql));
    
                string sqlB = "select top 5  * from Table_Table2";
                ds.Tables.Add(db.GetDataTable(sqlB));
    
                string FilePathAndName = Server.MapPath("Temp.xls");
                DataSetToExcel(ds, FilePathAndName);


    欢迎加入JAVA技术交流QQ群:179945282

    欢迎加入ASP.NET(C#)交流QQ群:17534377


  • 相关阅读:
    【NIO】IO与NIO的区别
    【在线工具】java开发常用在线工具
    【JVM】符号引用和直接引用
    【多线程】公平锁/非公平锁、乐观锁/悲观锁
    【Jenkins、sonar】
    开源软件记录
    Git Flow
    CF1324A Yet Another Tetris Problem 题解
    洛谷 P1199 三国游戏 题解
    CF33C Wonderful Randomized Sum 题解
  • 原文地址:https://www.cnblogs.com/q149072205/p/3009424.html
Copyright © 2011-2022 走看看