//导出Excel public void ExportToExecl() { //System.Windows.Forms.SaveFileDialog sfd = new SaveFileDialog(); //sfd.DefaultExt = "xls"; string FileName = "年度旅客查验分析-" + DateTime.Now.ToString("yyyyMMddHHmmss")+".xlsx"; //sfd.Filter = "Excel文件(*.xls)|*.xls"; //if (sfd.ShowDialog() == DialogResult.OK) //{ DoExport(SortListViewData, FileName); //} } /// <summary> /// 具体导出的方法 /// </summary> /// <param name="listView">ListView</param> /// <param name="strFileName">导出到的文件名</param> private void DoExport(ListView listView, string strFileName) { try { if (listView.Items.Count == 0) { MessageBox.Show("无数据!请先查询出数据后再进行导出操作。", "导出提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } int rowNum = listView.Items.Count; int columnNum = listView.Items[0].SubItems.Count; if (rowNum == 0 || string.IsNullOrEmpty(strFileName)) { return; } if (rowNum > 0) { ArrayList list = new ArrayList(NewmyInspectionInfos); System.Data.DataTable dt = new System.Data.DataTable(); DataColumn dc1 = new DataColumn(listView.Columns[0].Text, typeof(string)); DataColumn dc2 = new DataColumn(listView.Columns[1].Text, typeof(string)); DataColumn dc3 = new DataColumn(listView.Columns[2].Text, typeof(string)); dt.Columns.Add(dc1); dt.Columns.Add(dc2); dt.Columns.Add(dc3); DataRow row; for (int i = 0; i < list.Count; i++) { row = dt.NewRow(); row[listView.Columns[0].Text] = NewmyInspectionInfos[i].PersonnelName; row[listView.Columns[1].Text] = NewmyInspectionInfos[i].Cjcs; row[listView.Columns[2].Text] = NewmyInspectionInfos[i].Rjcs; dt.Rows.Add(row); } TableToExcel(dt, strFileName); GC.Collect(); } } catch (Exception ex) { MessageBox.Show("导出失败!错误信息:" + ex.ToString(), "导出提示"); GC.Collect(); } } public void TableToExcel(DataTable dt, string file) { SaveFileDialog saveFileDialog = new SaveFileDialog(); //设置文件标题 saveFileDialog.Title = "导出Excel文件"; //saveFileDialog.DefaultExt = "xls"; //设置文件类型 saveFileDialog.Filter = "Microsoft Office Excel 工作簿(*.xlsx)|*.xls"; //设置默认文件类型显示顺序 saveFileDialog.FilterIndex = 1; //是否自动在文件名中添加扩展名 saveFileDialog.AddExtension = true; //是否记忆上次打开的目录 saveFileDialog.RestoreDirectory = true; //设置默认文件名 saveFileDialog.FileName = file; IWorkbook workbook; if (saveFileDialog.ShowDialog() == DialogResult.OK) { string localFilePath = saveFileDialog.FileName.ToString(); string fileExt = Path.GetExtension(localFilePath).ToLower(); if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = null; return; } ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet1") : workbook.CreateSheet(dt.TableName); //表头 IRow row = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { ICell cell = row.CreateCell(i); cell.SetCellValue(dt.Columns[i].ColumnName); } //数据 for (int i = 0; i < dt.Rows.Count; i++) { IRow row1 = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row1.CreateCell(j); cell.SetCellValue(dt.Rows[i][j].ToString()); } } //固定列宽 sheet.SetColumnWidth(0, 18 * 256); sheet.SetColumnWidth(1, 18 * 256); sheet.SetColumnWidth(2, 18 * 256); //转为字节数组 MemoryStream stream = new MemoryStream(); workbook.Write(stream); var buf = stream.ToArray(); //保存为Excel文件 FileStream fs = new FileStream(localFilePath, FileMode.Create); fs.Write(buf, 0, buf.Length); //workbook.Write(fs); fs.Flush(); fs.Dispose(); stream.Close(); stream.Dispose(); buf = null; sheet = null; workbook.Close(); workbook = null; if (MessageBox.Show("导出成功,是否立即打开?", "导出提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { System.Diagnostics.Process.Start(localFilePath); } GC.Collect();//强行销毁 } }