zoukankan      html  css  js  c++  java
  • 使用Microsoft.Office.Interop.Excel.Application xlApp 生成Excel

    object filePath = @"C:" + DateTime.Now.ToShortDateString().Replace("-", "") + DateTime.Now.ToLongTimeString().Replace(":", "") + ".xlsx";   //文件保存路径
     
            public void GeneExcel(DataSet ds)
            {
                Excel.ApplicationClass xlApp = new Excel.ApplicationClass();
     
                Workbooks workbooks = xlApp.Workbooks;
                Workbook workBook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
                Worksheet workSheet = (Worksheet)workBook.Worksheets[1];//取得sheet1
     
                //打开一个WorkBook
                //Workbooks workbooks = xlApp.Workbooks;
                //Workbook workBook = xlApp.Workbooks.Open(filePath.ToString(),
                //    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                //    Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                //    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     
                ////得到WorkSheet对象
                //Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);
     
                try
                {
                    workSheet.Name = "表单一";
     
                    workSheet.Cells[1, 1] = "单元名称";
                    workSheet.Cells[1, 2] = "指标及其描述、特征值和权重";
                    workSheet.Cells[1, 23] = "属性";
                    workSheet.Cells[2, 2] = "D";
                    workSheet.Cells[2, 5] = "R";
                    workSheet.Cells[2, 8] = "A";
                    workSheet.Cells[2, 11] = "S";
                    workSheet.Cells[2, 14] = "T";
                    workSheet.Cells[2, 17] = "I";
                    workSheet.Cells[2, 20] = "C";
                    workSheet.Cells[2, 23] = "结果";
                    workSheet.Cells[2, 24] = "等级";
                    workSheet.Cells[3, 2] = "描述";
                    workSheet.Cells[3, 3] = "特征值";
                    workSheet.Cells[3, 4] = "权重";
                    workSheet.Cells[3, 5] = "描述";
                    workSheet.Cells[3, 6] = "特征值";
                    workSheet.Cells[3, 7] = "权重";
                    workSheet.Cells[3, 8] = "描述";
                    workSheet.Cells[3, 9] = "特征值";
                    workSheet.Cells[3, 10] = "权重";
                    workSheet.Cells[3, 11] = "描述";
                    workSheet.Cells[3, 12] = "特征值";
                    workSheet.Cells[3, 13] = "权重";
                    workSheet.Cells[3, 14] = "描述";
                    workSheet.Cells[3, 15] = "特征值";
                    workSheet.Cells[3, 16] = "权重";
                    workSheet.Cells[3, 17] = "描述";
                    workSheet.Cells[3, 18] = "特征值";
                    workSheet.Cells[3, 19] = "权重";
                    workSheet.Cells[3, 20] = "描述";
                    workSheet.Cells[3, 21] = "特征值";
                    workSheet.Cells[3, 22] = "权重";
     
                    workSheet.get_Range("A1", "A3").MergeCells = true; //合并单元格
                    Range rg1 = workSheet.get_Range(workSheet.Cells[1, 2], workSheet.Cells[1, 22]);
                    //range.ClearContents(); //先把Range内容清除,合并才不会出错
                    rg1.MergeCells = true;
                    rg1.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
                    rg1.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
     
                    workSheet.get_Range(workSheet.Cells[1, 23], workSheet.Cells[1, 24]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 2], workSheet.Cells[2, 4]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 5], workSheet.Cells[2, 7]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 8], workSheet.Cells[2, 10]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 11], workSheet.Cells[2, 13]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 14], workSheet.Cells[2, 16]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 17], workSheet.Cells[2, 19]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 20], workSheet.Cells[2, 22]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 23], workSheet.Cells[3, 23]).MergeCells = true;
                    workSheet.get_Range(workSheet.Cells[2, 24], workSheet.Cells[3, 24]).MergeCells = true;
     
                    /*往Excel格式表格中写入数据*/
                    int waterdataRows = ds.Tables[0].Rows.Count;
                    int waterdataCols = ds.Tables[0].Columns.Count;
                    for (int i = 1; i <= waterdataRows; i++)
                    {
                        workSheet.Cells[i + 3, 1] = ds.Tables[0].Rows[i - 1].ItemArray.GetValue(0);
                        for (int j = 1; j <= 7; j++)
                        {
                            workSheet.Cells[i + 3, 3 * j] = ds.Tables[0].Rows[i - 1].ItemArray.GetValue(j);
                        }
                        workSheet.Cells[i + 3, 23] = ds.Tables[0].Rows[i - 1].ItemArray.GetValue(1);
                        workSheet.Cells[i + 3, 24] = ds.Tables[0].Rows[i - 1].ItemArray.GetValue(3);
                    }
     
                    //插入空行
                    //Range rgInsert = (Excel.Range)workSheet.Rows[6, Type.Missing];
                    //rgInsert.Insert(Excel.XlDirection.xlDown, Type.Missing);
                    //rgInsert.Copy();  //复制
                    //rgInsert.Delete(); //删除
                    //range1.Copy(rgStyle);
     
                    //自动填充(如星期一到星期五)
                    //Excel.Range rng = workSheet.get_Range("B4", Type.Missing);
                    //rng.Value2 = "星期一 ";
                    //rng.AutoFill(workSheet.get_Range("B4", "B9"),
                    //    Excel.XlAutoFillType.xlFillWeekdays); 
     
                    Excel.Range rng = workSheet.get_Range("C4", Type.Missing);
                    rng.Value2 = "一月";
                    rng.AutoFill(workSheet.get_Range("C4", "C9"),
                        Excel.XlAutoFillType.xlFillMonths);
     
                    //rng.Value2 = "1";
                    //rng.AutoFill(workSheet.get_Range("D4", "D9"),
                    //    Excel.XlAutoFillType.xlFillSeries);
     
                    //Excel.Range rangePic = workSheet.get_Range("A10", "A11");
                    //rangePic.Select();
                    //workSheet.Shapes.AddPicture(@"C:6.jpg", Microsoft.Office.Core.MsoTriState.msoFalse,
                    //Microsoft.Office.Core.MsoTriState.msoTrue, Convert.ToSingle(rangePic.Left), Convert.ToSingle(rangePic.Top), 10, 10);
     
                    #region 应用样式
                    Excel.Range rgStyle = workSheet.get_Range("O10", Type.Missing);
                    rgStyle.Formula = "=SUM(O4:O9)";
                    rgStyle.Calculate();
                    //rgStyle.Interior.ColorIndex = ColorIndex.红色;//15背景色
                    //rgStyle.Font.Color = ColorIndex.白色; //无效
                    //rgStyle.Font.Bold = true;
                    //rgStyle.Font.Size = 9;
     
                    Excel.Style style;
                    //style = workBook.Styles["NewStyle"];
                    style = workBook.Styles.Add("NewStyle", Type.Missing);
                    style.Font.Name = "Verdana";
                    style.Font.Size = 12;
                    style.Font.Color = 255;//前景色
                    style.Interior.Color = (200 << 16) | (200 << 8) | 200; //背景色
                    //rgStyle.Interior.ColorIndex = ColorIndex.红色;//15背景色
                    style.Interior.Pattern = Excel.XlPattern.xlPatternSolid;
                    rgStyle.Value2 = "'Style Test";
                    rgStyle.Style = "NewStyle";
                    rgStyle.Columns.AutoFit();
                    #endregion
     
                    #region 行高、列宽
                    //Range rgHeight = workSheet.get_Range("C9", Type.Missing);
                    //rgHeight.Value = "sdfsdfsdf";
                    //rgHeight.RowHeight = 100;
                    //range.EntireColumn.AutoFit();
     
                    Range rgWidth = workSheet.get_Range("C9", Type.Missing);
                    rgWidth.Value = "sdfsfscvfffffffffffdf";
                    //rgWidth.ColumnWidth = 20;
                    rgWidth.EntireColumn.AutoFit();  //自动根据内容设定宽度
                    #endregion
     
                    //sheet.Visible = Excel.XlSheetVisibility.xlSheetHidden;  //隐藏工作表
     
                    #region 保存Excel
                    workBook.Saved = true;
                    //workBook.Save();
                    //workBook.SaveCopyAs(filePath);
                    workBook.SaveAs(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                    //workBook.SaveAs(filePath, Excel.XlFileFormat.xlXMLSpreadsheet, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                    //Excel.XlFileFormat.xlXMLSpreadsheet 生成多种格式文件 SaveAsFileFormat枚举
                
                    #endregion
     
                    #region 释放Excel资源
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(rg1);   //释放Range
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(rgStyle);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(rgWidth);
                    if (workSheet != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
                        workSheet = null;
                    }
                    if (workBook != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
                        workBook = null;
                    }
                    if (workbooks != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks);
                        workbooks = null;
                    }
                    if (xlApp != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
                        xlApp = null;
                    }
     
                    workBook.Close(false, null, null);
                    xlApp.Workbooks.Close();
                    xlApp.Quit();  //自动打开Excel,抛异常
     
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    #endregion
                }
                catch (Exception ex)
                {
                }
                finally
                {
              
                }
     
                System.Diagnostics.Process.Start(filePath.ToString());
            }

     转 http://www.cnblogs.com/gossip/archive/2011/10/22/2221465.html

  • 相关阅读:
    查看Ubuntu版本
    CentOS下实现postgresql开机自启动
    CentOS下查看crontab执行历史记录
    经常使用的一个python logging封装,支持同时向console和文件输出
    crontab中执行postgresql命令
    postgresql下一种对已有数据进行重新分表的plpgsql脚本
    2012需要分析的一些技术(1)
    Python Extension Packages for Windows
    一个简单的根据行数对大文件进行分片的python程序
    偶拾
  • 原文地址:https://www.cnblogs.com/smile-wei/p/4281265.html
Copyright © 2011-2022 走看看