【机房收费系统C#版】——导出Excel

来源:互联网 发布:软件负载均衡技术 编辑:程序博客网 时间:2024/05/17 12:52

前言

       机房合作开始好长了一段时间,反反复复开了几次会,项目也是一拖再拖,作为组长,有80%的责任都在于我。为了不让这个项目陪着我过年,要求自己一定要在这几天敲完。还是一样的问题,用C#敲,从一开始到现在,任何一个功能的实现都是现学现查,对于导出Excel表格这个功能来说更不是意外。在网上找了很多资料,反反复复地做小demo,终于有了我想要的效果。


实现

      首先是添加引用

       


    然后在程序代码上添加using

  

<span style="font-size:18px;">using System;using System.Data;using System.Windows.Forms;using Excel = Microsoft.Office.Interop.Excel;</span>


     在窗体上添加datagriview控件,添加列

    


      然后可以根据自己的需要添加列数,也可以编辑列标题。

      


  效果



代码实现

<span style="font-size:18px;"> private void Form2_Load(object sender, EventArgs e)        {                       dgvAccectCash.AutoGenerateColumns = true;            dgvAccectCash.Columns[0].HeaderText = "学号";            dgvAccectCash.Columns[1].HeaderText = "充值金额";            dgvAccectCash.Columns[2].HeaderText = "充值时间";            dgvAccectCash.Columns[3].HeaderText = "充值日期";            dgvAccectCash.Columns[4].HeaderText = "操作用户";            dgvAccectCash.Columns[5].HeaderText = "是否结账";        }</span>

      定义两个函数,一个是将datagridview中的数据导入表中,一个是将datagridview中的数据导出到一张表中。

1、一个是将datagridview中的数据导入表中

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

2、将datagridView中的数据导出到一张表中

<span style="font-size:18px;"> private void OutputAsExcelFile(DataGridView dataGridView)        {            //将datagridView中的数据导出到一张表中            DataTable tempTable = this.exporeDataToTable(dataGridView);            //导出信息到Excel表           // Microsoft.Office.Interop.Excel.ApplicationClass myExcel;            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("A1", 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();        }</span>


调用这两个函数实现导出Excel表格。

<span style="font-size:18px;"> private void button1_Click(object sender, EventArgs e)        {            exporeDataToTable(dgvAccectCash);//将datagridview中的数据导入到表中            OutputAsExcelFile(dgvAccectCash);//将datagridView中的数据导出到一张表中        }</span>

效果



问题

      这里面还是有一些问题:"无法嵌入互操作类型“Microsoft.Office.Interop.Excel.ApplicationClass”。请改用适用的接口".百度了一下是因为引用里“Microsoft.Office.Interop.Excel”这个属性的问题,修改“嵌入互操作类型”true或false属性就好了。

 

总结

      通过这个一小例子,感觉自己成长了不少,虽然在学习的过程中我们会遇到很多问题,这些问题看起来很困难,但是只要我们学会站在巨人的肩膀上学习,给自己多一点耐心和信心,相信这些困难一定会成为我们成长路上的基石。


2 0
原创粉丝点击