zoukankan      html  css  js  c++  java
  • Exel文件导出

    #region Exel文件导出函数
            protected object missing = Missing.Value;
            public string DataSetToExcel(DataTable dt, string tpFile, string filePath, string saveFileName, int templateID, string outFileType)
            {
                System.Data.DataTable visibleCol = SysModelTypeLogic.GetVisibleColByTypeAndUserID(templateID, UserState.CurrentUser.UserID).Tables[0];
                #region 获取Excel模板对象
                Excel.Application app = new Excel.ApplicationClass();
                app.Visible = false;
                //打开模板文件,得到WorkBook对象           
                Excel.Workbook workBook = app.Workbooks.Open(tpFile, missing, missing, missing, missing, missing,
                    missing, missing, missing, missing, missing, missing, missing);           
                //得到WorkSheet对象
                Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);
               
                #endregion

                #region 将源DataTable数据写入Excel

                #region 导入标题

                Excel.Range titleRange = workSheet.get_Range(workSheet.Cells[1, 1], workSheet.Cells[2, visibleCol.Rows.Count]);
                titleRange.Merge(true);//合并列     
                titleRange.MergeCells = true;//合并单元格            
                titleRange.Value2 = saveFileName;
                titleRange.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//水平居中
                titleRange.Font.Size=14;//设置字体大小
                #endregion

                #region 导入列名
                Excel.Range range;
                for (int i = 0; i < visibleCol.Rows.Count; i++)
                {
                    workSheet.Cells[3, i + 1] = visibleCol.Rows[i]["HeaderText"].ToString();
                    range = (Excel.Range)workSheet.Cells[3, i + 1];
                    range.Cells.Borders.LineStyle = 1;
                    range.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Silver);
                    if (visibleCol.Rows[i]["HeaderStyle-Width"] != DBNull.Value && !string.IsNullOrEmpty(visibleCol.Rows[i]["HeaderStyle-Width"].ToString()))
                    {
                        range.ColumnWidth = Convert.ToDouble(visibleCol.Rows[i]["HeaderStyle-Width"]) / 6;
                    }
                    range.Font.Bold = true;
                    range.HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;
                }
                #endregion

                #region 导入数据
                Excel.Range borderRange;           
                string columnName = string.Empty;
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    for (int j = 0; j < visibleCol.Rows.Count; j++)
                    {
                        if (visibleCol.Rows[j]["DataField"] != null)
                        {
                            columnName = visibleCol.Rows[j]["DataField"].ToString();
                            if (dt.Columns[columnName].ToString() == visibleCol.Rows[j]["DataField"].ToString())
                            {
                                workSheet.Cells[i + 4, j + 1] = dt.Rows[i][columnName].ToString()+ "\r";//转换为字符串
                                borderRange = (Excel.Range)workSheet.Cells[i + 4, j + 1];
                                borderRange.Cells.Borders.LineStyle = 1;

                                #region 设置对齐方式
                                if (visibleCol.Rows[j]["ItemStyle-HorizontalAlign"] != DBNull.Value && !string.IsNullOrEmpty(visibleCol.Rows[j]["ItemStyle-HorizontalAlign"].ToString()))
                                {
                                    string horizontalAlign = visibleCol.Rows[j]["ItemStyle-HorizontalAlign"].ToString().ToLower();
                                    switch (horizontalAlign)
                                    {
                                        case "right":
                                            borderRange.HorizontalAlignment = 4;
                                            break;
                                        case "center":
                                            borderRange.HorizontalAlignment = 3;
                                            break;
                                        case "left":
                                            borderRange.HorizontalAlignment = 2;
                                            break;
                                        default:
                                            break;
                                    }
                                }
                                #endregion

                                #region 自动求和(添加合计行)

                                if (visibleCol.Rows[j]["AllowSum"] != DBNull.Value && !string.IsNullOrEmpty(visibleCol.Rows[j]["AllowSum"].ToString()))
                                {
                                    string allowSum = visibleCol.Rows[j]["AllowSum"].ToString();
                                    Excel.Range totalRange;
                                    if (allowSum == "1")//需要合计
                                    {

                  workSheet.Cells[dt.Rows.Count + 4, j + 1] = "=sum(R[-" + (i + 1).ToString() + "]C:R[-1]C)";
                                    }
                                    else
                                    {
                                        workSheet.Cells[dt.Rows.Count + 4, j + 1] = "";
                                    }
                                    totalRange = (Excel.Range)workSheet.Cells[dt.Rows.Count + 4, j + 1];
                                    totalRange.Cells.Borders.LineStyle = 1;
                                }
                                #endregion

                                #region 设置格式
                                if (visibleCol.Rows[j]["DataType"] != DBNull.Value && !string.IsNullOrEmpty(visibleCol.Rows[j]["DataType"].ToString()))
                                {
                                    string dataType = visibleCol.Rows[j]["DataType"].ToString().ToLower();
                                    if (dataType == "decimal")//设置金额,格式保留两位小数
                                    {
                                        borderRange.NumberFormatLocal = "0.00";
                                    }
                                    else if (dataType == "datetime")//设置日期格式
                                    {                                      
                                        borderRange.NumberFormatLocal = "yyyy-mm-dd";                                   
                                    }

                else if(dataType=="string")
                                    {
                                        workSheet.Cells[i + 2, j + 1] = dt.Rows[i][columnName].ToString()+"\r";
                                        //borderRange.NumberFormatLocal = "@ ";//转换为字符串
                                        //borderRange.NumberFormat = Excel.XlParameterDataType.xlParamTypeUnknown;

                                    }
                                }
                                #endregion

                            }
                        }
                    }
                }
               
                #endregion

                #endregion

                #region 输出Excel文件并退出
                try
                {

                    //app.DisplayAlerts = false;
                    saveFileName = saveFileName + "(" + System.DateTime.Now.ToString("yyyyMMddHHmmss") + UserState.CurrentUser.EmployeeCName + ").xls";
                    string fileName = filePath + saveFileName;
                    workBook.SaveAs(fileName, missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing);
                    //app.AlertBeforeOverwriting = false;//保存时不提示文件已经存在,是不覆盖。
                    workBook.Close(null, null, null);
                    app.Workbooks.Close();
                    app.Application.Quit();
                    app.Quit();

                    Marshal.ReleaseComObject(workSheet);
                    Marshal.ReleaseComObject(workBook);
                    Marshal.ReleaseComObject(app);
                    workSheet = null;
                    workBook = null;
                    app = null;
                    GC.Collect();
                }
                catch (Exception e)
                {
                    throw e;
                }
                finally
                {
                    //Process[] myProcesses;
                    //DateTime startTime;
                    //myProcesses = Process.GetProcessesByName("Excel");
                    ////得不到Excel进程ID,暂时只能判断进程启动时间
                    //foreach (Process myProcess in myProcesses)
                    //{
                    //    startTime = myProcess.StartTime;
                    //    myProcess.Kill();
                    //}
                }
                #endregion

                #region 打开Excel
                return outFileType.Replace("~/", "相对路径") + saveFileName;

                //Response.Redirect(outFileType.Replace("~/", "相对路径") + saveFileName, true);
                #endregion
            }
            #endregion

  • 相关阅读:
    PHP数字补零的两种方法
    php 防跨站表单提交
    PHP字符串压缩
    原生JS实现表单序列化serialize()
    java并发实现原子操作
    Effective java -- 9 并发/序列化
    Effective java -- 8 异常
    Effective java -- 7 通用程序设计
    Effective java -- 6 方法
    Effective java -- 5 枚举和注解
  • 原文地址:https://www.cnblogs.com/ywblog/p/2160709.html
Copyright © 2011-2022 走看看