Dans la plupart des formulaires, il existe une fonction pour exporter des tableaux Excel. Si vous encapsulez une classe, il n'est pas possible d'appeler cette classe directement lors de son utilisation. Plus pratique ? , ce qui réduit également la duplication de code, pourquoi pas ?
Ajoutez d'abord une référence, sélectionnez la bibliothèque d'objets Microsoft Office 16.0 et la bibliothèque d'objets Microsoft Excel 16.0 dans com.
Ajouter un espace de noms :
using Microsoft.Office.Interop.Excel;//导出Excel using Microsoft.Office.Core; using System.Data.OleDb; using System.Windows.Forms;
Créez une nouvelle classe et nommez-la OutputExcel, le code est le suivant :
public class outputExcel { //导出excel public void RExcel(string name, DataGridView dgv) { //总可见行列数 int rowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Visible); int colCount = dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible); //如果没有数据 if (dgv.Rows.Count == 0 || rowCount == 0) { MessageBox.Show("表中没有数据", "提示"); } else { //创建文件的路径 SaveFileDialog save = new SaveFileDialog(); save.Filter = "excel files(*.xlsx)|*.xlsx"; save.Title = "请选择要导出数据的位置"; save.FileName = name + DateTime.Now.ToLongDateString(); if (save.ShowDialog() == DialogResult.OK) { string fileName = save.FileName; //创建excel对象 Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); if (excel == null) { MessageBox.Show("Excel无法启动", "提示"); return; } //创建工作薄 Microsoft.Office.Interop.Excel.Workbook excelBook = excel.Workbooks.Add(true); Microsoft.Office.Interop.Excel.Worksheet excelSheet = (Microsoft.Office.Interop.Excel.Worksheet)excelBook.Worksheets[1]; //生成字段名 int k = 0; for (int i = 0; i < dgv.ColumnCount; i++) { if (dgv.Columns[i].Visible)//不导出隐藏列 { excel.Cells[1, k + 1] = dgv.Columns[i].HeaderText; k++; } } //填充数据 for (int i = 0; i < dgv.RowCount; i++) { k = 0; for (int j = 0; j < dgv.ColumnCount; j++) { if (dgv.Columns[j].Visible)//不导出隐藏的列 { if (dgv[j, i].ValueType == typeof(string)) { excel.Cells[i + 2, k + 1] = "" + dgv[j, i].Value.ToString(); } else { excel.Cells[i + 2, k + 1] = dgv[j, i].Value.ToString(); } } k++; } } try { excelBook.Saved = true; excelBook.SaveCopyAs(fileName); MessageBox.Show("导出成功!"); } catch { MessageBox.Show("导出文件失败,文件可能正在使用中", "提示"); } } } } }
Quand la fenêtre Lorsque vous devez utiliser cette fonction, vous devez écrire le code suivant :
private void btnoutExcel_Click(object sender, EventArgs e) { outputExcel form1 = new outputExcel(); form1.RExcel("", dataGridView1); }
Articles associés :
[Tutoriel c#] Types de données C#
Package multithread C/C++ du connecteur mysql
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!