using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.OleDb; using Microsoft.Office; private void SaveFile_Click(object sender, EventArgs e) { try { #region 驗證可操作性 //申明保存對話框 SaveFileDialog dlg = new SaveFileDialog(); //默然文件後綴 dlg.DefaultExt = "xls "; //以當前時間作爲默認文件名 dlg.FileName = DateTime.Now.ToString("yyyymmddhhmmss") + "CustomerData"; //文件後綴列表 dlg.Filter = "EXCEL文件(*.XLS)|*.xls "; //默然路徑是系統當前路徑 dlg.InitialDirectory = "D:/"; //打開保存對話框 if (dlg.ShowDialog() == DialogResult.Cancel) return; //返回文件路徑 string fileNameString = dlg.FileName; //驗證strFileName是否爲空或值無效 if (fileNameString.Trim() == " ") { return; } //定義表格內數據的行數和列數 int rowscount = dataGridView1.Rows.Count; int colscount = dataGridView1.Columns.Count; //行數必須大於0 if (rowscount <= 0) { MessageBox.Show("沒有數據可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //列數必須大於0 if (colscount <= 0) { MessageBox.Show("沒有數據可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //行數不可以大於65536 if (rowscount > 65536) { MessageBox.Show("數據記錄數太多(最多不能超過65536條),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } //列數不可以大於255 if (colscount > 255) { MessageBox.Show("數據記錄行數太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } #endregion Microsoft.Office.Interop.Excel.Application objExcel = null; Microsoft.Office.Interop.Excel.Workbook objWorkbook = null; Microsoft.Office.Interop.Excel.Worksheet objsheet = null; try { //申明對象 objExcel = new Microsoft.Office.Interop.Excel.Application(); objWorkbook = objExcel.Workbooks.Add(true); objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet; //設置EXCEL不可見 objExcel.Visible = false; //向Excel中寫入表格的表頭 int displayColumnsCount = 1; for (int i = 0; i <= dataGridView1.ColumnCount - 1; i++) { if (dataGridView1.Columns[i].Visible == true) { objExcel.Cells[1, displayColumnsCount] = dataGridView1.Columns[i].HeaderText.Trim(); displayColumnsCount++; } } //向Excel中逐行逐列寫入表格中的數據 for (int row = 0; row <= dataGridView1.RowCount - 1; row++) { displayColumnsCount = 1; for (int col = 0; col < colscount; col++) { if (dataGridView1.Columns[col].Visible == true) { try { if (dataGridView1.Rows[row].Cells[col].Value != null) { objExcel.Cells[row + 2, displayColumnsCount] = "'" + dataGridView1.Rows[row].Cells[col].Value.ToString(); } else { objExcel.Cells[row + 2, displayColumnsCount] = ""; } displayColumnsCount++; } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } //保存文件 objWorkbook.SaveAs(fileNameString, true, null, null, null, null, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, true, true, true, true, true); objExcel.Quit(); } catch (Exception error) { MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } catch (Exception ex) { MessageBox.Show(ex.Message, "錯誤提示"); } }
這個代碼大部分都可以很容易看懂,難點就是objWorkbook.SaveAs()這個函數,其實這個函數是一個縮寫,其完整格式爲:Microsoft.Office.Interop.Excel.Workbook.SaveAs(Filename, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local),其中第三個Password是設置打開excel時的密碼,不用時可寫null,WriteResPassword是當要編輯時的密碼,不用時寫null,ReadOnlyRecommended是設置只讀操作,不用時寫null,CreateBackup是啓動備份,當啓用時,一旦修改了excel,就會自動對先前的數據進行保存,不用時寫null。