using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Microsoft.Office.Interop.Excel;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WebCrawl
{
    class Excel
    {
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);

public static void ExportExcel( DataGridView myDGV)
        {
            if (myDGV.Rows.Count > 0)
            {

string saveFileName = "";
                //bool fileSaved = false; 
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.DefaultExt = "xls";
                saveDialog.Filter = "Excel文件|*.xls";
                //saveDialog.FileName = fileName;
                saveDialog.ShowDialog();
                saveFileName = saveDialog.FileName;
                if (saveFileName.IndexOf(":") < 0) return; //被点了取消  
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                if (xlApp == null)
                {
                    MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
                    return;
                }
                //Microsoft.Office.Interop.Excel.Application _excelApplicatin = null;
                //_excelApplicatin = new Microsoft.Office.Interop.Excel.Application();
                //_excelApplicatin.Visible = true;
                //_excelApplicatin.DisplayAlerts = true;

Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
                Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
                Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 
                Microsoft.Office.Interop.Excel.Range range;
                range = (Microsoft.Office.Interop.Excel.Range)worksheet.get_Range("A1","J1");
                range.Select();
                xlApp.ActiveWindow.SplitColumn = 0;
                xlApp.ActiveWindow.SplitRow = 1;
                xlApp.ActiveWindow.FreezePanes = true;
                //xlApp.ActiveWindow.FreezePanes = true;
               
                range.Font.Name = "微软雅黑";
                range.Font.Size = 10;
                range.WrapText = true;
                range.EntireColumn.AutoFit();
                range.HorizontalAlignment = XlHAlign.xlHAlignCenter;
                range.VerticalAlignment = XlVAlign.xlVAlignCenter; ;

//写入标题 
                for (int i = 0; i < myDGV.ColumnCount; i++)
                {
                    worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;
                }
                //写入数值 
                for (int r = 0; r < myDGV.Rows.Count-1; r++)
                {

for (int i = 0; i < myDGV.ColumnCount; i++)
                    {
                        worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value;
                       
                    }
                    object Cell1="A"+(r+2)+"";
                    object Cell2="J"+(r+2)+"";
                    worksheet.get_Range(Cell1,Cell2).Font.Name = "微软雅黑";
                    worksheet.get_Range(Cell1,Cell2).Font.Size = 10;
                    worksheet.get_Range("C" + (r + 2) + "", "C" + (r + 2) + "").Font.Color = System.Drawing.Color.FromArgb(128, 0, 128).ToArgb();
                    //worksheet.get_Range("C" + (r + 2) + "", "C" + (r + 2) + "").Interior.Color = System.Drawing.Color.FromArgb(255, 204, 153).ToArgb();
                    //worksheet.get_Range(Cell1, Cell2).WrapText = true;
                    worksheet.get_Range(Cell1, Cell2).HorizontalAlignment = XlHAlign.xlHAlignCenter;
                    worksheet.get_Range(Cell1, Cell2).VerticalAlignment = XlVAlign.xlVAlignCenter;
                    worksheet.get_Range(Cell1, Cell2).Borders.LineStyle = XlLineStyle.xlContinuous;
                    System.Windows.Forms.Application.DoEvents();
                }
                worksheet.Columns.EntireColumn.AutoFit();//列宽自适应 
                //if (Microsoft.Office.Interop.cmbxType.Text != "Notification") 
                //{ 
                //    Excel.Range rg = worksheet.get_Range(worksheet.Cells[2, 2], worksheet.Cells[ds.Tables[0].Rows.Count + 1, 2]); 
                //    rg.NumberFormat = "00000000"; 
                //}

if (saveFileName != "")
                {
                    try
                    {
                        workbook.Saved = true;
                        //workbook.SaveCopyAs(saveFileName);
                        workbook.SaveAs(saveFileName, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel8, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                       
                        //fileSaved = true; 
                    }
                    catch (Exception ex)
                    {
                        //fileSaved = false; 
                        MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                    }

}
                //else 
                //{ 
                //    fileSaved = false; 
                //} 
                xlApp.Quit();
                GC.Collect();//强行销毁
                Kill(xlApp);
                // if (fileSaved && System.IO.File.Exists(saveFileName)) System.Diagnostics.Process.Start(saveFileName); //打开EXCEL 
            }
            else
            {
                return;
            }

}
        public static void Kill(Microsoft.Office.Interop.Excel.Application excel)
        {
            IntPtr t = new IntPtr(excel.Hwnd); //得到这个句柄,具体作用是得到这块内存入口

int k = 0;
            GetWindowThreadProcessId(t, out k); //得到本进程唯一标志k
            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用
            p.Kill(); //关闭进程k
        }
    }
}

winform datagridview 导出excel的更多相关文章

  1. 从DataGridView导出Excel

    从DataGridView导出Excel的两种情况,不多说,直接记录代码(新建类,直接引用传入参数). using System; using System.Collections.Generic; ...

  2. c# datagridview导出Excel文件 问题

    今天vs2010c#开发做datagridview导出Excel文件时,发现一个问题,和大家探讨一下: 第一种方式:写流的方式 private void button_Excel_Click(obje ...

  3. winform导入导出excel,后台动态添加控件

    思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...

  4. 一个通用的DataGridView导出Excel扩展方法(支持列数据格式化)

    假如数据库表中某个字段存放的值“1”和“0”分别代表“是”和“否”,要在DataGridView中显示“是”和“否”,一般用两种方法,一种是在sql中直接判断获取,另一种是在DataGridView的 ...

  5. C# DataGridView 导出 Excel(根据Excel版本显示选择不同后缀格式xls或xlsx)

    /// <summary> /// DataGridView导出至Excel,解决问题:打开Excel文件格式与扩展名指定格式不一致 /// </summary> /// &l ...

  6. DataGridView 导出Excel (封装)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...

  7. 【转】c# winform DataGridView导出数据到Excel中,可以导出当前页和全部数据

    准备工作就是可以分页的DataGridView,和两个按钮,一个用来导出当前页数据到Excel,一个用来导出全部数据到Excel 没有使用SaveFileDialog,但却可以弹出保存对话框来 先做导 ...

  8. winform DataGridView 导出到Excel表格 分类: WinForm 2014-07-04 10:48 177人阅读 评论(0) 收藏

    public bool ExportDataGridview(DataGridView gridView)         {             if (gridView.Rows.Count ...

  9. [WinForm]dataGridView导出到EXCEL

    方法一: SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Execl files (*.xls)|*.xls"; ...

随机推荐

  1. 如何才能在python的路上走得更远

    刚开始了新的课程,现在又没有什么心情学习了,不知点解就是提不起兴趣去学习,为什么呢?学习python如何才能提起劲,有什么方法可以提上劲学习?

  2. .net 客户端调用java或.net webservice进行soapheader验证

    .net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservi ...

  3. win11.2.0.4lsnrctl status hang

    以前听客户说监听日志大于4G,监听出现问题.本次另一个客户也出现这个问题,表现为监听lsnrctl start,status长久hang住 匹配mos WINDOWS: Listener Hangs ...

  4. 不使用循环或递归判断一个数是否为3的幂(leetcode 326)

    326. Power of ThreeGiven an integer, write a function to determine if it is a power of three. Follow ...

  5. govendor 无法添加.h文件

    例如:github.com\ethereum\go-ethereum\crypto\secp256k1 是一个CGO项目 通过govendor add +external只能引入secp256k1下的 ...

  6. 项目里如何访问AppDelegate

    项目里面访问AppDelegate做全局变量用有好几种方式 最原始就是 AppDelegate *appDelegate = (AppDelegate *)[[UIApplication shared ...

  7. PHP 多维数组排序 函数怎么保持数字键不被重新索引

    /** * 根据数组中的某个键值大小进行排序,仅支持二维数组 * * @param array $array 排序数组 * @param string $key 键值 * @param bool $a ...

  8. 20164322韩玉婷 -----Exp1 PC平台逆向破解

    Exp1 PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序同时包含另一 ...

  9. Linux文件编辑时光标操作

    一.移动光标类命令 h :光标左移一个字符 l :光标右移一个字符 space:光标右移一个字符 Backspace:光标左移一个字符 k或Ctrl+p:光标上移一行 j或Ctrl+n :光标下移一行 ...

  10. 20164301 Exp1 PC平台逆向破解

    逆向及Bof基础实践 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数, foo函数会简单回显任何用户输入的字符串.该程序同时包含另一 ...