• dataset 导出Excel


     /// <summary>   
            ///    
            /// </summary>   
            /// <param name="dataSet">要导出的数据来源</param>   
            /// <param name="fileName">导出的Excel名称</param>   
            /// <param name="saveDirectoryName">要保存到服务器上文件夹的名称</param>   
            /// <param name="deleteOldFile">指示是否删除旧文件</param>   
            /// [特别说明] 当指定DataTable某列加入链接时,需在数据源给DataTable增设两个扩展属性  如下格式:   
            ///    DataTableShowLinkSettingsModel dsm=new DataTableShowLinkSettingsModel();   
            ///    dsm.IsShowLink = true;//设置该表是否显示超链接   
            ///    dsm.ShowLinkColumns = new int[] { 2};//设置哪一列显示为超链接   
            ///    dt2.ExtendedProperties.Add("DataTableShowLinkSettings", dsm);//放入扩展属性   
            public static string DataSetToLocalExcel(DataSet dataSet, string fileName, string saveDirectoryName, bool deleteOldFile)
            {
                if (dataSet==null)
                {
                    return "count:0";
                }
                //设置导出文件在服务器上的文件夹   
                //saveDirectoryName = string.Empty;
                deleteOldFile = true;
                string exportDir = string.Empty;
                string directoryPath = string.Empty;
                string rootPath = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath);
                if (string.IsNullOrEmpty(saveDirectoryName))
                {
                    directoryPath = rootPath + "UploadFiles\ExportExcelFile";
                }
                else
                {
                    directoryPath = rootPath + saveDirectoryName;
                }
                if (!Directory.Exists(directoryPath))
                {
                    Directory.CreateDirectory(directoryPath);
                }
                exportDir = directoryPath;
                //设置文件在服务器上的路径   
                string outputPath = exportDir + "\" + fileName;
                string dowloadUrl = "/UploadFiles/ExportExcelFile/" + fileName;
                if (deleteOldFile)
                {
                    if (System.IO.File.Exists(outputPath)) { System.IO.File.Delete(outputPath); }
                }
                object missing = System.Reflection.Missing.Value;
                Excel.Application app = new Excel.ApplicationClass();
                app.Application.Workbooks.Add(true);
                Excel.Workbook excelWorkbook =  (Excel.Workbook)app.ActiveWorkbook;//获取添加的workbook
    
    
                //创建Excel应用实例
                //Application excelApp = new Application();
    
                //创建Excel文档  
                //Workbook excelWorkbook = excelApp.Workbooks.Add(Type.Missing);
    
                //for (int i = 0; i < dataSet.Tables.Count; i++)
                //{
                //    //excelWorkbook.Sheets.Add();
                //    excelWorkbook.Worksheets.Add(Type.Missing,Type.Missing,1,Type.Missing);
                //}
                
                int sheetIndex = 0;
    
    
                foreach (System.Data.DataTable dt in dataSet.Tables)
                {
    
                    try
                    {
                         //每个table都要放到数组中以便于Excel绑定
                        object[,] rawData = new object[dt.Rows.Count + 1, dt.Columns.Count];
    
    
                        for (int col = 0; col < dt.Columns.Count; col++)
                        {
                            //把列明放到数组的第一行中 
                            rawData[0, col] = dt.Columns[col].ColumnName;
    
                            //将数据放到数组中中每一列都添加到数组
                            for (int row = 0; row < dt.Rows.Count; row++)
                            {
                                rawData[row + 1, col] = dt.Rows[row].ItemArray[col];
                            }
                        }
    
    
                        //创建列标   
                        string finalColLetter = string.Empty;
                        string colCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                        int colCharsetLen = colCharset.Length;
    
                        if (dt.Columns.Count > colCharsetLen)
                        {
                            finalColLetter = colCharset.Substring(
                                (dt.Columns.Count - 1) / colCharsetLen - 1, 1);
                        }
    
                        finalColLetter += colCharset.Substring(
                                (dt.Columns.Count - 1) % colCharsetLen, 1);
    
    
    
                        ++sheetIndex;                   
                        //这种方式会自动创建一个sheet,因此先用了默认的,然后再添加
                        Microsoft.Office.Interop.Excel.Worksheet excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelWorkbook.Worksheets[sheetIndex];
                        
                        //下一个页小于等于表格总数就加一个sheet
                        if (sheetIndex+1<=dataSet.Tables.Count)
                        {
                            excelWorkbook.Worksheets.Add(Type.Missing, Type.Missing, 1, Type.Missing);
                        }                    
                        
    
                        excelSheet.Name = dt.TableName;
                        //工作区中的范围设定 
                        string excelRange = string.Format("A1:{0}{1}",
                            finalColLetter, dt.Rows.Count + 1);
    
                        excelSheet.get_Range(excelRange, Type.Missing).Value2 = rawData;
    
                        // 第一行变成粗体  
                        ((Range)excelSheet.Rows[1, Type.Missing]).Font.Bold = true;
    
                        //调整列宽为自适应
                        Range allColumn = excelSheet.Columns; 
                        allColumn.AutoFit(); 
                    }
                    catch (Exception)
                    {
    
                        throw;
                    }
    
                    #region 设置超链接
                    //DataTableShowLinkSettingsModel dsm = dt.ExtendedProperties["DataTableShowLinkSettings"] == null ? null : (DataTableShowLinkSettingsModel)dt.ExtendedProperties["DataTableShowLinkSettings"];
                    //if (dsm != null)
                    //{
                    //    bool flag = dsm.IsShowLink;
                    //    int[] addHyperlinksColumnsList = dsm.ShowLinkColumns;
                    //    if (flag)
                    //    {
                    //        if (addHyperlinksColumnsList != null && addHyperlinksColumnsList.Length > 0)
                    //        {
                    //            int rowsCount = excelSheet.UsedRange.Rows.Count;
                    //            int columnCount = excelSheet.UsedRange.Columns.Count;
                    //            for (int i = 1; i < rowsCount; i++)
                    //            {
                    //                for (int j = 0; j < addHyperlinksColumnsList.Length; j++)
                    //                {
                    //                    Range range = (Range)excelSheet.Cells[i + 1, addHyperlinksColumnsList[j]];
                    //                    //要添加的单元格位置   
                    //                    string link = range.Cells.Value2 == null ? "" : range.Cells.Value2.ToString();
                    //                    excelSheet.Hyperlinks.Add(range, link, Type.Missing, Type.Missing, Type.Missing);
                    //                }
                    //            }
                    //        }
                    //    }
                    //}
                    #endregion
                }
                 
                app.Application.DisplayAlerts = false;//过程中的提示不弹出
                //保存文档
                excelWorkbook.SaveAs(outputPath);
                
                excelWorkbook.Close(true, missing,missing);
                excelWorkbook = null;
    
                //释放应用 
                app.Quit();
                app = null;
    
                //回收对象
                GC.Collect();
                GC.WaitForPendingFinalizers();
                //DownExcelFromServer(outputPath, fileName);
                return dowloadUrl;
            }

     需要加引用

    using Microsoft.Office.Interop;
    using Excel = Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Interop.Excel;

  • 相关阅读:
    XTU1199:Number Game
    SSL连接建立过程分析(1)
    JavaScript高级编程II
    PreferenceFragment 使用 小结
    crm使用soap更改下拉框的文本值
    POJ2241——The Tower of Babylon
    四个好看的CSS样式表格
    无论你在哪里上班,请记住下面黄金法则!
    js的for in循环和java里的foreach循环的差别
    具体解释EBS接口开发之物料导入API
  • 原文地址:https://www.cnblogs.com/hbhzz/p/4016421.html
Copyright © 2020-2023  润新知