1. 程式人生 > >【機房收費系統C#版】——導出Excel

【機房收費系統C#版】——導出Excel

missing watermark columns 感覺 end 巨人 orm content file

前言

機房合作開始好長了一段時間。反重復復開了幾次會,項目也是一拖再拖,作為組長。有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屬性就好了。

技術分享

總結

通過這個一小樣例,感覺自己成長了不少,盡管在學習的過程中我們會遇到非常多問題。這些問題看起來非常困難。可是僅僅要我們學會站在巨人的肩膀上學習,給自己多一點耐心和信心,相信這些困難一定會成為我們成長路上的基石。


【機房收費系統C#版】——導出Excel