Interop.Excelを使用したExcelの生成

19810 ワード

 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(falsenullnull);
                xlApp.Workbooks.Close();
                xlApp.Quit();  //    Excel,   
 
                GC.WaitForPendingFinalizers();
                GC.Collect();
                #endregion
            }
            catch (Exception ex)
            {
            }
            finally
            {
          
            }
 
            System.Diagnostics.Process.Start(filePath.ToString());
        }