【機房收費系統C#版】——導出Excel
阿新 • • 發佈:2017-06-30
missing watermark columns 感覺 end 巨人 orm content file
定義兩個函數,一個是將datagridview中的數據導入表中。一個是將datagridview中的數據導出到一張表中。
2、將datagridView中的數據導出到一張表中
效果
前言
機房合作開始好長了一段時間。反重復復開了幾次會,項目也是一拖再拖,作為組長。有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