zoukankan      html  css  js  c++  java
  • 【转载】DataGridView之将数据导出成Excel和Word格式

    很多情况下我们需要将grid中的数据导出成Excel或Word格式。下面我们来说说如何实现它。

    1 先用一个方法,筛选出有效的数据。

    因为grid中可能会有隐藏列,而这些列中的数据我们一般都是不需要的,所以我们先将grid中的数据进行过滤,保存在一个DataTable中。

    private DataTable exporeDataToTable(DataGridView dataGridView)
            {
                //将datagridview中的数据导入到表中
                DataTable tempTable = new DataTable("tempTable");
                //定义一个模板表,专门用来获取列名
                DataTable modelTable = new DataTable("ModelTable");
                //创建列
                for (int column = 0; column < dataGridView.Columns.Count; column++)
                {
                    //可见的列才显示出来
                    if (dataGridView.Columns[column].Visible == true)
                    {
                        DataColumn tempColumn = new DataColumn(dataGridView.Columns[column].HeaderText, typeof(string));
                        tempTable.Columns.Add(tempColumn);
                        DataColumn modelColumn = new DataColumn(dataGridView.Columns[column].Name, typeof(string));
                        modelTable.Columns.Add(modelColumn);
                    }
                }
                //添加datagridview中行的数据到表
                for (int row = 0; row < dataGridView.Rows.Count; row++)
                {
                    if (dataGridView.Rows[row].Visible == false)
                    {
                        continue;
                    }
                    DataRow tempRow = tempTable.NewRow();
                    for (int i = 0; i < tempTable.Columns.Count; i++)
                    {
                        tempRow[i] = dataGridView.Rows[row].Cells[modelTable.Columns[i].ColumnName].Value;
                    }
                    tempTable.Rows.Add(tempRow);
                }
                return tempTable;
            }
    

      

    2 导出为Excel。

    导出Excel会用到Microsoft.Office.Interop.Excel.dll,所以必须先在项目中引用这个DLL。

    private void OutputAsExcelFile(DataGridView dataGridView)
            {
                //将datagridView中的数据导出到一张表中
                DataTable tempTable = this.exporeDataToTable(dataGridView);
                //导出信息到Excel表
                Microsoft.Office.Interop.Excel.ApplicationClass myExcel;
                Microsoft.Office.Interop.Excel.Workbooks myWorkBooks;
                Microsoft.Office.Interop.Excel.Workbook myWorkBook;
                Microsoft.Office.Interop.Excel.Worksheet myWorkSheet;
                char myColumns;
                Microsoft.Office.Interop.Excel.Range myRange;
                object[,] myData = new object[500, 35];
                int i, j;//j代表行,i代表列
                myExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
                //显示EXCEL
                myExcel.Visible = true;
                if (myExcel == null)
                {
                    MessageBox.Show("本地Excel程序无法启动!请检查您的Microsoft Office正确安装并能正常使用", "提示");
                    return;
                }
                myWorkBooks = myExcel.Workbooks;
                myWorkBook = myWorkBooks.Add(System.Reflection.Missing.Value);
                myWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)myWorkBook.Worksheets[1];
                myColumns = (char)(tempTable.Columns.Count + 64);//设置列
                myRange = myWorkSheet.get_Range("A4", myColumns.ToString() + "5");//设置列宽
                int count = 0;
                //设置列名
                foreach (DataColumn myNewColumn in tempTable.Columns)
                {
                    myData[0, count] = myNewColumn.ColumnName;
                    count = count + 1;
                }
                //输出datagridview中的数据记录并放在一个二维数组中
                j = 1;
                foreach (DataRow myRow in tempTable.Rows)//循环行
                {
                    for (i = 0; i < tempTable.Columns.Count; i++)//循环列
                    {
                        myData[j, i] = myRow[i].ToString();
                    }
                    j++;
                }
                //将二维数组中的数据写到Excel中
                myRange = myRange.get_Resize(tempTable.Rows.Count + 1, tempTable.Columns.Count);//创建列和行
                myRange.Value2 = myData;
                myRange.EntireColumn.AutoFit();
            }
    

      

    3 导出为Word格式

    同样的,导出为Word要添加对Microsoft.Office.Interop.Word.Dll的引用。

    private void OutPutAsWordFile(DataGridView dataGridView)
            {
                //转换后的表
                DataTable table = exporeDataToTable(this.dataGridView1);
    
                Microsoft.Office.Interop.Word.ApplicationClass wordApp = new Microsoft.Office.Interop.Word.ApplicationClass();
                Microsoft.Office.Interop.Word.Document document;
                Microsoft.Office.Interop.Word.Table wordTable;
                Microsoft.Office.Interop.Word.Selection wordSelection;
                object wordObj = System.Reflection.Missing.Value;
    
                document = wordApp.Documents.Add(ref wordObj, ref wordObj, ref wordObj, ref wordObj);
                wordSelection = wordApp.Selection;
                //显示word文档
                wordApp.Visible = true;
                if (wordApp == null)
                {
                    MessageBox.Show("本地Word程序无法启动!请检查您的Microsoft Office正确安装并能正常使用", "提示");
                    return;
                }
                document.Select();
                wordTable = document.Tables.Add(wordSelection.Range, dataGridView.Rows.Count+1, dataGridView.Columns.Count, ref wordObj, ref wordObj);
                //设置列宽
                wordTable.Columns.SetWidth(50.0F, Microsoft.Office.Interop.Word.WdRulerStyle.wdAdjustSameWidth);
                
                 //标题数据
                for (int i = 0; i < table.Columns.Count; i++)
                {
                    wordTable.Cell(1, i + 1).Range.InsertAfter(table.Columns[i].ColumnName);
                }
                //输出表中数据
                for (int i = 0; i <= table.Rows.Count - 1; i++)
                {
                    for (int j = 0; j < table.Columns.Count; j++)
                    {
                        if (table.Rows[i][j] != null)
                        {
                            wordTable.Cell(i + 2, j + 1).Range.InsertAfter(table.Rows[i][j].ToString());
                        }
                    }
                } 
            }
    

      

  • 相关阅读:
    Ansible 实战之部署Web架构
    Ansible Ad-Hoc命令集
    Ansible 基础知识
    memcached监控脚本
    Django2.1.1与xadmin0.6.0遇到的坑(一)
    django1.11 启动错误:Generator expression must be parenthesized
    使用Git Bash从Git上下载代码到本地以及上传代码到码云Git
    PyCharm如何导入python项目,并配置虚拟环境
    PYTHON中的字典(DICT),列表(LIST),元组(TUPLE)
    python2 和 python3共存的常见使用(如安装虚拟环境的问题)
  • 原文地址:https://www.cnblogs.com/aaaheng/p/2496688.html
Copyright © 2011-2022 走看看