#region Excel导出 private void btnExportExcel_Click(object sender, RoutedEventArgs e) { Export(this.dgvList, "XX信息查询列表"); } public void Export(DataGrid dataGrid, string excelTitle) { System.Data.DataTable dt = new System.Data.DataTable(); for (int i = 0; i < dataGrid.Columns.Count; i++) { if (dataGrid.Columns[i].Visibility == System.Windows.Visibility.Visible)//只导出可见列 { dt.Columns.Add(dataGrid.Columns[i].Header.ToString());//构建表头 } } for (int i = 0; i < dataGrid.Items.Count; i++) { int columnsIndex = 0; System.Data.DataRow row = dt.NewRow(); for (int j = 0; j < dataGrid.Columns.Count; j++) { if (dataGrid.Columns[j].Visibility == System.Windows.Visibility.Visible) { if (dataGrid.Items[i] != null && (dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]) as TextBlock) != null)//填充可见列数据 { row[columnsIndex] = (dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]) as TextBlock).Text.ToString(); } else row[columnsIndex] = ""; columnsIndex++; } } dt.Rows.Add(row); } string FileName = ExcelExport(dt, excelTitle); } public string ExcelExport(System.Data.DataTable DT, string title) { try { //创建Excel Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook ExcelBook = ExcelApp.Workbooks.Add(System.Type.Missing); //创建工作表(即Excel里的子表sheet) 1表示在子表sheet1里进行数据导出 Microsoft.Office.Interop.Excel.Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelBook.Worksheets[1]; //如果数据中存在数字类型 可以让它变文本格式显示 ExcelSheet.Cells.NumberFormat = "@"; //设置工作表名 ExcelSheet.Name = title; //设置Sheet标题 string start = "A1"; string end = ChangeASC(DT.Columns.Count) + "1"; Microsoft.Office.Interop.Excel.Range _Range = (Microsoft.Office.Interop.Excel.Range)ExcelSheet.get_Range(start, end); _Range.Merge(0); //单元格合并动作(要配合上面的get_Range()进行设计) _Range = (Microsoft.Office.Interop.Excel.Range)ExcelSheet.get_Range(start, end); _Range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; _Range.Font.Size = 18; //设置字体大小 _Range.Font.Name = "黑体"; //设置字体的种类 ExcelSheet.Cells[1, 1] = title; //Excel单元格赋值 _Range.EntireColumn.AutoFit(); //自动调整列宽 //写表头 for (int m = 1; m < DT.Columns.Count; m++) { ExcelSheet.Cells[2, m] = DT.Columns[m].ColumnName.ToString(); start = "A2"; end = ChangeASC(DT.Columns.Count) + "2"; _Range = (Microsoft.Office.Interop.Excel.Range)ExcelSheet.get_Range(start, end); _Range.Font.Size = 13; //设置字体大小 _Range.Font.Name = "黑体"; //设置字体的种类 _Range.EntireColumn.AutoFit(); //自动调整列宽 _Range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; } //写数据 for (int i = 0; i < DT.Rows.Count; i++) { for (int j = 1; j < DT.Columns.Count; j++) { //Excel单元格第一个从索引1开始 // if (j == 0) j = 1; ExcelSheet.Cells[i + 3, j ] = DT.Rows[i][j].ToString(); } } //表格属性设置 for (int n = 0; n < DT.Rows.Count + 1; n++) { start = "A" + (n + 3).ToString(); end = ChangeASC(DT.Columns.Count) + (n + 3).ToString(); //获取Excel多个单元格区域 _Range = (Microsoft.Office.Interop.Excel.Range)ExcelSheet.get_Range(start, end); _Range.Font.Size = 12; //设置字体大小 _Range.Font.Name = "宋体"; //设置字体的种类 _Range.EntireColumn.AutoFit(); //自动调整列宽 _Range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; //设置字体在单元格内的对其方式 _Range.EntireColumn.AutoFit(); //自动调整列宽 } ExcelApp.DisplayAlerts = false; //保存Excel的时候,不弹出是否保存的窗口直接进行保存 //弹出保存对话框,并保存文件 Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog(); sfd.DefaultExt = ".xlsx"; sfd.Filter = "Office 2007 File|*.xlsx|Office 2000-2003 File|*.xls|所有文件|*.*"; if (sfd.ShowDialog() == true) { if (sfd.FileName != "") { ExcelBook.SaveAs(sfd.FileName); //将其进行保存到指定的路径 GlobalVar.ShowMsgInfo("导出文件存储为: " + sfd.FileName); } } //释放可能还没释放的进程 ExcelBook.Close(); ExcelApp.Quit(); PubHelper.Instance.KillAllExcel(ExcelApp); return sfd.FileName; } catch { GlobalVar.ShowMsgWarning("导出文件保存失败!"); return null; } } /// <summary> /// 获取当前列列名,并得到EXCEL中对应的列 /// </summary> /// <param name="count"></param> /// <returns></returns> private string ChangeASC(int count) { string ascstr = ""; switch (count) { case 1: ascstr = "A"; break; case 2: ascstr = "B"; break; case 3: ascstr = "C"; break; case 4: ascstr = "D"; break; case 5: ascstr = "E"; break; case 6: ascstr = "F"; break; case 7: ascstr = "G"; break; case 8: ascstr = "H"; break; case 9: ascstr = "I"; break; case 10: ascstr = "J"; break; case 11: ascstr = "K"; break; case 12: ascstr = "L"; break; case 13: ascstr = "M"; break; case 14: ascstr = "N"; break; case 15: ascstr = "O"; break; case 16: ascstr = "P"; break; case 17: ascstr = "Q"; break; case 18: ascstr = "R"; break; case 19: ascstr = "S"; break; case 20: ascstr = "Y"; break; default: ascstr = "U"; break; } return ascstr; } #endregion
博客内容主要用于日常学习记录,内容比较随意,如有问题,还需谅解!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2016-10-20 android学习笔记54——ContentProvider