zoukankan      html  css  js  c++  java
  • 【机房收费系统C#版】——导出Excel

    前言

           机房合作開始好长了一段时间。反重复复开了几次会,项目也是一拖再拖,作为组长。有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属性就好了。

     

    总结

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


  • 相关阅读:
    XE8下安装IntraWeb 14.0.40和D7下安装IntraWeb 11.0.63破解版的正确方法
    网易博客打不开怎么办
    SQL SERVER 导入EXCEL的存储过程
    TMemoryStream、String与OleVariant互转
    【转载】Delphi Idhttp的get和post方法
    sqlserver得到行号
    Delphi 中的 XMLDocument 类详解(5)
    10款免费且开源的项目管理工具
    iOS开发者必备:九大设计类工具
    15个步骤创立技术公司,并收获千万用户(完结)
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7100089.html
Copyright © 2011-2022 走看看