C#_캡슐화된 클래스를 호출하여 Excel 테이블 내보내기 기능 구현

php是最好的语言
풀어 주다: 2018-08-03 11:29:52
원래의
2405명이 탐색했습니다.

머리말

대부분의 형태에는 엑셀 테이블을 내보내는 기능이 있습니다. 클래스를 캡슐화한다면, 사용할 때 이 클래스를 직접 호출하는 것이 더 편리하지 않을까요? , 코드 중복도 줄어듭니다. 왜 안 될까요?

Operation

먼저 참조를 추가하고 com에서 Microsoft Office 16.0 개체 라이브러리와 Microsoft Excel 16.0 개체 라이브러리를 선택합니다.

C#_캡슐화된 클래스를 호출하여 Excel 테이블 내보내기 기능 구현

네임스페이스 추가:

using Microsoft.Office.Interop.Excel;//导出Excel
using Microsoft.Office.Core;
using System.Data.OleDb;
using System.Windows.Forms;
로그인 후 복사

새 클래스를 만들고 이름을 outputExcel로 지정합니다. 코드는 다음과 같습니다.

public  class outputExcel
    {
        //导出excel
        public void RExcel(string name, DataGridView dgv)
        {
            //总可见行列数
            int rowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Visible);
            int colCount = dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible);

            //如果没有数据
            if (dgv.Rows.Count == 0 || rowCount == 0)
            {
                MessageBox.Show("表中没有数据", "提示");
            }
            else
            {
                //创建文件的路径
                SaveFileDialog save = new SaveFileDialog();
                save.Filter = "excel files(*.xlsx)|*.xlsx";
                save.Title = "请选择要导出数据的位置";
                save.FileName = name + DateTime.Now.ToLongDateString();

                if (save.ShowDialog() == DialogResult.OK)
                {
                    string fileName = save.FileName;

                    //创建excel对象
                    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
                    if (excel == null)
                    {
                        MessageBox.Show("Excel无法启动", "提示");
                        return;
                    }

                    //创建工作薄
                    Microsoft.Office.Interop.Excel.Workbook excelBook = excel.Workbooks.Add(true);
                    Microsoft.Office.Interop.Excel.Worksheet excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1];

                    //生成字段名
                    int k = 0;
                    for (int i = 0; i < dgv.ColumnCount; i++)
                    {
                        if (dgv.Columns[i].Visible)//不导出隐藏列
                        {
                            excel.Cells[1, k + 1] = dgv.Columns[i].HeaderText;
                            k++;
                        }
                    }

                    //填充数据
                    for (int i = 0; i < dgv.RowCount; i++)
                    {
                        k = 0;
                        for (int j = 0; j < dgv.ColumnCount; j++)
                        {
                            if (dgv.Columns[j].Visible)//不导出隐藏的列
                            {
                                if (dgv[j, i].ValueType == typeof(string))
                                {
                                    excel.Cells[i + 2, k + 1] = "" + dgv[j, i].Value.ToString();
                                }
                                else
                                {
                                    excel.Cells[i + 2, k + 1] = dgv[j, i].Value.ToString();
                                }
                            }
                            k++;
                        }
                    }

                    try
                    {
                        excelBook.Saved = true;
                        excelBook.SaveCopyAs(fileName);
                        MessageBox.Show("导出成功!");
                    }
                    catch
                    {
                        MessageBox.Show("导出文件失败,文件可能正在使用中", "提示");
                    }
                }
            }
        }


    }
로그인 후 복사

양식에서 이 함수를 사용해야 하는 경우 다음 코드를 작성해야 합니다.

private void btnoutExcel_Click(object sender, EventArgs e)
        {
            outputExcel form1 = new outputExcel();
            form1.RExcel("", dataGridView1);

        }
로그인 후 복사

관련 기사:

【c# 튜토리얼】C# 데이터 유형

mysql 커넥터 C/C++ 다중 스레드 패키지

위 내용은 C#_캡슐화된 클래스를 호출하여 Excel 테이블 내보내기 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿