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

转载于:https://www.cnblogs.com/weixing/archive/2011/10/19/2217657.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值