博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】DataGridView之将数据导出成Excel和Word格式
阅读量:4981 次
发布时间:2019-06-12

本文共 5635 字,大约阅读时间需要 18 分钟。

很多情况下我们需要将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());                    }                }            }         }

  

转载于:https://www.cnblogs.com/aaaheng/archive/2012/05/11/2496688.html

你可能感兴趣的文章
hdu1502 , Regular Words, dp,高精度加法
查看>>
SpringBoot在idea中的热部署配置
查看>>
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
JS验证图片格式和大小并预览
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
接口和抽象类有什么区别
查看>>
Codeforces Round #206 (Div. 2)
查看>>
**p
查看>>
优先队列详解
查看>>
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
设计类图
查看>>
类对象
查看>>
[Voice communications] 声音的滤波
查看>>
软件建模——第9章 毕业论文管理系统—面向对象方法
查看>>
[SDOI2008]洞穴勘测
查看>>
Difference between Linearizability and Serializability
查看>>
IDEA使用操作文档
查看>>
UIView
查看>>