C# excel

range.NumberFormatLocal = "@";     //设置单元格格式为文本
range = (Range)worksheet.get_Range("A1", "E1");     //获取Excel多个单元格区域:本例做为Excel表头
range.Merge(
0);     //单元格合并动作
worksheet.Cells[
1, 1] = "Excel单元格赋值";     //Excel单元格赋值
range.Font.Size
= 15;     //设置字体大小
range.Font.Underline
=true;     //设置字体是否有下划线
range.Font.Name
="黑体";      //设置字体的种类
range.HorizontalAlignment
=XlHAlign.xlHAlignCenter;     //设置字体在单元格内的对其方式
range.ColumnWidth
=15;     //设置单元格的宽度
range.Cells.Interior.Color
=System.Drawing.Color.FromArgb(255,204,153).ToArgb();     //设置单元格的背景色
range.Borders.LineStyle
=1;     //设置单元格边框的粗细
range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb());     
//给单元格加边框
range.EntireColumn.AutoFit();     
//自动调整列宽
Range.HorizontalAlignment
= xlCenter;     // 文本水平居中方式
Range.VerticalAlignment
= xlCenter     //文本垂直居中方式
Range.WrapText
=true;     //文本自动换行
Range.Interior.ColorIndex
=39;     //填充颜色为淡紫色
Range.Font.Color
=clBlue;     //字体颜色
xlsApp.DisplayAlerts
=false;     //保存Excel的时候,不弹出是否保存的窗口直接进行保存

        /// <summary>
        /// DataGridView导出Excel
        /// </summary>
        /// <param name="strCaption">Excel文件中的标题</param>
        /// <param name="myDGV">DataGridView 控件</param>
        /// <returns>0:成功;1:DataGridView中无记录;2:Excel无法启动;9999:异常错误</returns>
        private int ExportExcel(string strCaption, DataGridView myDGV)
        {
            int result = 9999;
            // 列索引,行索引,总列数,总行数
            int ColIndex = 0;
            int RowIndex = 0;
            int ColCount = myDGV.ColumnCount;
            int RowCount = myDGV.RowCount+6;//------------

            if (myDGV.RowCount == 0)
            {
                result = 1;
            }

            // 创建Excel对象
            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
            if (xlApp == null)
            {
                result = 2;
            }
            try
            {
                // 创建Excel工作薄
                Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
                Microsoft.Office.Interop.Excel.Worksheet xlSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlBook.Worksheets[1];
                // 设置标题
                Microsoft.Office.Interop.Excel.Range range = xlSheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, ColCount]); //标题所占的单元格数与DataGridView中的列数相同
                range.MergeCells = true; //是否 单元格合并  还是 自动合并呢?
                range.ColumnWidth = 12;//单元格的宽度
                xlApp.ActiveCell.FormulaR1C1 = strCaption;
               
                xlApp.ActiveCell.Font.Size = 20;
                xlApp.ActiveCell.Font.Bold = true;
                xlApp.ActiveCell.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;//居中
                // 创建缓存数据
                object[,] objData = new object[RowCount + 1, ColCount];
                
                foreach (DataGridViewColumn col in myDGV.Columns)
                {//不加1 就写不进去 很奇怪;加1多空出1行
                    objData[RowIndex+1, ColIndex++] = col.HeaderText;
                }
                // 获取数据
                for (RowIndex = 1; RowIndex - 1 < myDGV.RowCount; RowIndex++)
                {
                    for (ColIndex = 0; ColIndex < ColCount; ColIndex++)
                    {
                        if (myDGV[ColIndex, RowIndex - 1].ValueType == typeof(string)
                            || myDGV[ColIndex, RowIndex - 1].ValueType == typeof(DateTime))//这里就是验证DataGridView单元格中的类型,如果是string或是DataTime类型,则在放入缓存时在该内容前加入" ";
                        { //应该是我的数据没到位
                            objData[RowIndex+0, ColIndex] = "" + myDGV[ColIndex, RowIndex - 1].Value;
                        }
                        else
                        {
                            objData[RowIndex+0, ColIndex] = myDGV[ColIndex, RowIndex - 1].Value;
                        }
                    }
                    System.Windows.Forms.Application.DoEvents();
                }
                // 写入Excel
                range = xlSheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[RowCount, ColCount]);
                range.Value2 = objData;

                //保存
                xlBook.Saved = true;
                xlBook.SaveCopyAs("C:\\测试" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls");
                //返回值
                result = 0;
            }
            catch (Exception err)
            {
                result = 9999;
            }
            finally
            {
                xlApp.Quit();
                GC.Collect(); //强制回收
            }
            return result;
        }

 

posted @ 2009-10-21 19:17  Ry5  阅读(4112)  评论(1编辑  收藏  举报