zoukankan      html  css  js  c++  java
  • Excel 导出

    //调用         

       dgvRecord.DataSource = dt;

                DAL.DataToExcel exp =new DAL.DataToExcel();

                int flag = exp.ExistsRegedit();
                if (flag == 0)
                {
                    MessageBox.Show("请先安装office或者wps,再进行导出 !");
                }
                else
                {
                    if (dt != null && dt.Rows.Count > 0)
                    {
                        if (flag == 1 || flag == 2 || flag == 3)
                        {
                            ExportExcel(dt, flag);
                        }
                        else if (flag == 4 || flag == 5 || flag == 6 || flag == 7)
                        {
                            ExportExcel(dt, flag);
                        }
                    }
                    else
                    {
                        MessageBox.Show("没有要导出的数据!");
                    }
                }

    //方法

    #region 查询注册表,判断本机是否安装office2003,2007和wps
            public int ExistsRegedit()
            {
                int ifused = 0;
                RegistryKey rk = Registry.LocalMachine;
                RegistryKey akey = rk.OpenSubKey(@"SOFTWARE\Microsoft\Office\11.0\Excel\InstallRoot\");//查询2003

                RegistryKey akey07 = rk.OpenSubKey(@"SOFTWARE\Microsoft\Office\12.0\Excel\InstallRoot\");//查询2007
                RegistryKey akeytwo = rk.OpenSubKey(@"SOFTWARE\Kingsoft\Office\6.0\common\");//查询wps
                //检查本机是否安装Office2003
                if (akey != null)
                {
                    string file03 = akey.GetValue("Path").ToString();
                    if (File.Exists(file03 + "Excel.exe"))
                    {
                        ifused += 1;
                    }
                }

                //检查本机是否安装Office2007

                if (akey07 != null)
                {
                    string file07 = akey07.GetValue("Path").ToString();
                    if (File.Exists(file07 + "Excel.exe"))
                    {
                        ifused += 2;
                    }
                }

                //检查本机是否安装wps
                if (akeytwo != null)
                {
                    string filewps = akeytwo.GetValue("InstallRoot").ToString();
                    if (File.Exists(filewps + @"\office6\et.exe"))
                    {
                        ifused += 4;
                    }
                }
                return ifused;
            }
            #endregion

    #region 导出excel
            public void ExportExcel(System.Data.DataTable dt, int flag)
            {
                //-***************获取excel对象***************
                string saveFileName = "";
                bool fileSaved = false;
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.DefaultExt = "xls";
                if (flag == 2)
                {
                    saveDialog.Filter = "Excel文件.xlsx|*.xlsx";
                }
                else if (flag == 4 || flag == 5 || flag == 6 || flag == 7)
                {
                    saveDialog.Filter = "wps文件.et|*.et";
                }
                else
                {
                    saveDialog.Filter = "Excel文件.xls|*.xls";
                }
                saveDialog.FileName = "导出普查信息表 " + DateTime.Today.ToString("yyyy-MM-dd");
                saveDialog.ShowDialog();
                saveFileName = saveDialog.FileName;
                if (saveFileName.IndexOf(":") < 0) return; //被点了取消
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook workbook = xlApp.Workbooks.Add(true);
                Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
                Microsoft.Office.Interop.Excel.Range range;

                // 列索引,行索引,总列数,总行数              
                int colIndex = 0;
                int RowIndex = 0;
                int colCount = dgvRecord.ColumnCount;
                int RowCount = dt.Rows.Count;

                // *****************获取数据*********************
                // 创建缓存数据
                object[,] objData = new object[RowCount + 1, colCount];

                // 获取具体数据
                for (RowIndex = 0; RowIndex < RowCount; RowIndex++)
                {
                    for (colIndex = 0; colIndex < colCount; colIndex++)
                    {
                        objData[RowIndex, colIndex] = dt.Rows[RowIndex][colIndex];
                    }

                }
                //********************* 把数值型转成字符型l*******************
                range = worksheet.get_Range(xlApp.Cells[3, 2], xlApp.Cells[RowCount + 2, 2]);
                range.NumberFormatLocal = "@";
                range = worksheet.get_Range(xlApp.Cells[3, 3], xlApp.Cells[RowCount + 2, 3]);
                range.NumberFormatLocal = "@";
                range = worksheet.get_Range(xlApp.Cells[3, 7], xlApp.Cells[RowCount + 2, 7]);
                range.NumberFormatLocal = "@";
                range = worksheet.get_Range(xlApp.Cells[3, 8], xlApp.Cells[RowCount + 2, 8]);
                range.NumberFormatLocal = "@";

                //********************* 写入Excel*******************
                range = worksheet.get_Range(xlApp.Cells[3, 1], xlApp.Cells[RowCount + 2, colCount - 2]);
                range.Value2 = objData;
                System.Windows.Forms.Application.DoEvents();

                //特殊数字格式
                range = worksheet.get_Range(xlApp.Cells[3, colCount - 5], xlApp.Cells[RowCount + 2, colCount - 5]);
                range.NumberFormat = "yyyy-MM-dd hh:mm:ss";

                //********************* 设置报表表格样式******************* 
                //设置为横向打印
                //xlApp.ActiveSheet.PageSetup.Orientation=2;

                //设置报表表格为最适应宽度
                worksheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colCount]).Select();
                worksheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colCount]).Columns.AutoFit();

                //绘制边框   
                worksheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[RowCount + 2, colCount]).Borders.LineStyle = 1;
                //设置左边线加粗
                worksheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[RowCount, 1]).Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;
                //设置上边线加粗
                worksheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, colCount]).Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;
                //设置右边线加粗
                worksheet.get_Range(xlApp.Cells[1, colCount], xlApp.Cells[RowCount, colCount]).Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;
                //设置下边线加粗
                worksheet.get_Range(xlApp.Cells[RowCount + 2, 1], xlApp.Cells[RowCount + 2, colCount]).Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThick;

                xlApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                range = worksheet.get_Range(xlApp.Cells[2, 1], xlApp.Cells[2, colCount]);
                //range.Interior.ColorIndex = 1;//背景色
                range.Font.Bold = true;
                range.RowHeight = 20;
                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 1]).ColumnWidth = 25;
                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 2]).ColumnWidth = 13;
                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 3]).ColumnWidth = 15;
                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 4]).ColumnWidth = 30;
                ((Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 5]).ColumnWidth = 22;

                //合并单元格
                Microsoft.Office.Interop.Excel.Range excelRange = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, 29]);
                excelRange.Merge(excelRange.MergeCells);

                //获取列标题
                for (int i = 0; i < colCount; i++)
                {
                    worksheet.Cells[2, i + 1] = dgvRecord.Columns[i].HeaderText;
                }

                //文档标题
                range = worksheet.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, 1]);
                range.Font.Bold = true;
                range.Font.Size = 20;
                worksheet.Cells[1, 1] = "普查信息表";

                //***************************保存**********************

                if (saveFileName != "")
                {
                    try
                    {
                        workbook.Saved = true;
                        workbook.SaveCopyAs(saveFileName);
                        fileSaved = true;
                    }
                    catch (Exception ex)
                    {
                        fileSaved = false;
                        MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                    }
                }
                else
                {
                    fileSaved = false;
                }
                xlApp.Quit();
                GC.Collect();//强行销毁  
                if (fileSaved && File.Exists(saveFileName))
                {
                    System.Diagnostics.Process.Start(saveFileName);
                }

            }
            #endregion

  • 相关阅读:
    数据链路层
    补码加减法
    matlab函数
    HDU2159_二维完全背包问题
    HDU2844买表——多重背包初探
    HDU1025贫富平衡
    最大m段子段和
    01背包浮点数情况
    第K大01背包
    HDU2955 01背包
  • 原文地址:https://www.cnblogs.com/weixing/p/2217657.html
Copyright © 2011-2022 走看看