C#开发利用WPS和Office组件导出DataGridView数据到Excel

发布于:2014年09月05日    浏览:4005 次    属于:软件开发 > C#程序开发 原创作者:张晓栋

 

在开发中经常需要将DataGridView中的数据导出为Excel电子表格,我们平时使用的Excel一般有两种那就是微软的Office和金山的 WPS,对于一般用户金山的WPS就可以满足日常的所有办公需求,并且WPS支持打开编辑所有版本的Office文档,但是对于开发人员我们在开发时不能 确定用户使用的是WPS还是Office,所以我们需要做出两种解决方案,今天我教大家使用WPS和Office的组件来导出DataGridView中 的数据。


提示,在编码前请先在项目中引用需要的COM组件,需要自己的电脑上安装有WPS和Office软件

WPS的组件-Kingsoft ET 2.0 Object Library

Office的组件-Microsoft Excel 15.0 Object Library


源码:

using ET;
using Microsoft.Office.Interop.Excel;
        public void daochu(DataGridView dgv)

        {
            int colCount = dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible);
            int rowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Visible);
            if (dgv.Rows.Count == 0 || rowCount == 0)
            {
                MessageBox.Show("表中没有数据", "提示");
            }
            else
            {
                SaveFileDialog save = new SaveFileDialog();
                save.Filter = "Office2007-2013(*.xlsx)|*.xlsx|Office2003(*.xls)|*.xls|WPS(*.et)|*.et";
                save.Title = "请选择要导出数据的位置-东东数据导出";
                if (save.ShowDialog() == DialogResult.OK)
                {
                    string fileName = save.FileName;
                    try

                    {

                        //首先使用Wps组件导出,如果客户电脑没有安装Wps则进入Catch模块

                        ET.Application et = new ET.Application();
                        ET.workbook etBook = new ET.workbook();
                        ET.Worksheet etSheet = (ET.Worksheet)etBook.Worksheets[1];
                        et.Visible = false;
                        for (int i = 0; i < dgv.ColumnCount; i++)
                        {
                            etSheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
                            ET.Range range = (ET.Range)etSheet.Cells[1, i + 1];
                            range.Font.Name = "楷体";
                            range.Font.Bold = true;
                            range.Font.Size = 14;
                        }
                        for (int i = 0; i < dgv.RowCount; i++)
                        {
                            for (int columnIndex = 0; columnIndex < dgv.Columns.Count; columnIndex++)
                            {
                                etSheet.Cells[i + 2, columnIndex + 1] = dgv.Rows[i].Cells[columnIndex].Value.ToString();
                            }

                        }

                        //单元格列宽自适应

                        etSheet.Columns.EntireColumn.AutoFit();

                        //填充色为淡绿色

                        etSheet.Columns.Interior.ColorIndex = 35;

                        //单元格内容左对齐

                        etSheet.Columns.HorizontalAlignment = ETHAlign.etHAlignLeft;

                        //单元格行高为25

                        etSheet.Columns.RowHeight = 25;

                        //单元格边框像素

                        etSheet.Cells.Borders.LineStyle = (ET.ETLineStyle)1;
                        try
                        {
                            etBook.Saved = true;
                            etBook.SaveCopyAs(fileName);
                            et.Quit();
                        }
                        catch
                        {
                            MessageBox.Show("导出失败,文件可能正在使用中", "提示");
                        }
                    }
                    catch

                    {

                        //使用微软Office组件导出

                        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                        Microsoft.Office.Interop.Excel.Workbook excelBook = excel.Workbooks.Add();
                        Microsoft.Office.Interop.Excel.Worksheet excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1];
                        for (int i = 0; i < dgv.ColumnCount; i++)
                        {
                            excelSheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;
                            Microsoft.Office.Interop.Excel.Range range = (Microsoft.Office.Interop.Excel.Range)excelSheet.Cells[1, i + 1];
                            range.Font.Name = "楷体";
                            range.Font.Bold = true;
                            range.Font.Size = 14;
                        }
                        for (int i = 0; i < dgv.RowCount; i++)
                        {
                            for (int columnIndex = 0; columnIndex < dgv.Columns.Count; columnIndex++)
                            {
                                excelSheet.Cells[i + 2, columnIndex + 1] = dgv.Rows[i].Cells[columnIndex].Value.ToString();
                            }
                        }
                        excelSheet.Columns.EntireColumn.AutoFit();
                        excelSheet.Columns.Interior.ColorIndex = 35;
                        excelSheet.Columns.HorizontalAlignment = XlHAlign.xlHAlignLeft;
                        excelSheet.Columns.RowHeight = 25;
                        excelSheet.Columns.Borders.LineStyle = 1;
                        try
                        {
                            excelBook.Saved = true;
                            excelBook.SaveCopyAs(fileName);
                            excel.Quit();
                        }
                        catch
                        {
                            MessageBox.Show("导出失败,文件可能正在使用中", "提示");
                        }
                    }
                }
            }
        }