首页 > 代码库 > 导出Excel方法(winform或web)
导出Excel方法(winform或web)
一、winform形式导出Excel
此方法适用于winform项目导出Excel,使用前需要引用Excel.dll,此处是直接用ds导出Excel,导出方法类GetExport如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.IO; 5 using System.Text; 6 using System.Windows.Forms; 7 using Excel; 8 9 namespace XX.Common 10 { 11 class ExportExcel 12 { 13 14 public void GetExport(DataSet ds) 15 { 16 if (ds == null) 17 { 18 return; 19 } 20 string saveFileName = ""; 21 bool fileSaved = false; 22 SaveFileDialog saveDialog = new SaveFileDialog(); 23 saveDialog.DefaultExt = "xls"; 24 saveDialog.Filter = "Excel文件|*.xls"; 25 saveDialog.FileName = "name";//Excel文件名称 26 saveDialog.ShowDialog(); 27 saveFileName = saveDialog.FileName; 28 if (saveFileName.IndexOf(":") < 0) 29 { 30 return; 31 } 32 //被点了取消 33 34 Excel.Application xlApp = new Excel.Application(); 35 if (xlApp == null) 36 { 37 MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel"); 38 return; 39 } 40 Excel.Workbooks workbooks = xlApp.Workbooks; 41 Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); 42 Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1 43 Excel.Range range; 44 //string oldCaption = DateTime.Today.ToString("yy-MM-dd"); 45 long totalCount = ds.Tables[0].Rows.Count; 46 long rowRead = 0; 47 //float percent = 0;//本次不显示进度,因此注释掉,需要的话可以放开运用 48 //worksheet.Cells[1, 1] = "评分结果"; 49 //写入字段 50 for (int i = 0; i < ds.Tables[0].Columns.Count; i++) 51 { 52 //worksheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName; 53 //range = (Excel.Range)worksheet.Cells[1, i + 1]; 54 ///////此处直接将列名写死,因为ds中直接取出的是英文字段名,若取出的是中文列名可直接用上面两行代码写入(根据实际需要灵活运用即可)//////////// 55 worksheet.Cells[1, 1] = "第一行第一列"; 56 worksheet.Cells[1, 2] = "第一行第二列"; 69 //range = (Excel.Range)worksheet.Cells[1, i + 4];//此处是为列名加样式(底色,加粗等),此次不加样式 70 //range.Interior.ColorIndex = 15; 71 //range.Font.Bold = true; 72 } 73 //写入数值 74 for (int r = 0; r < ds.Tables[0].Rows.Count; r++) 75 { 76 for (int i = 0; i < ds.Tables[0].Columns.Count - 1; i++) 77 { 78 worksheet.Cells[r + 2, 1] = r + 1; 79 worksheet.Cells[r + 2, i + 2] = ds.Tables[0].Rows[r][i]; 80 } 81 rowRead++; 82 //percent = ((float)(100 * rowRead)) / totalCount; 83 //this.lbl_process.Text = "正在导出数据[" + percent.ToString("0.00") + "%]..."; //这里可以自己做一个label用来显示进度. 84 85 System.Windows.Forms.Application.DoEvents(); 86 } 87 //this.lbl_process.Visible = false; //label可见性,此次不用 88 range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[ds.Tables[0].Rows.Count + 1, ds.Tables[0].Columns.Count + 1]); 89 range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null); 90 91 range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic; 92 range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous; 93 94 range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin; 95 96 if (ds.Tables[0].Columns.Count > 1) 97 { 98 range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic; 99 100 range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle = Excel.XlLineStyle.xlContinuous;101 range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;102 }103 104 if (saveFileName != "")105 {106 try107 {108 109 workbook.Saved = true;110 workbook.SaveCopyAs(saveFileName);111 112 fileSaved = true;113 }114 catch (Exception ex)115 {116 117 fileSaved = false;118 MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);119 }120 }121 else122 {123 fileSaved = false;124 125 }126 xlApp.Quit();127 GC.Collect();//强行销毁 128 if (fileSaved && File.Exists(saveFileName))129 {130 //System.Diagnostics.Process.Start(saveFileName);131 MessageBox.Show("导出成功!", "通知");132 }133 134 }135 }136 }
二、Web形式导出Excel
Web版本导出,此处我使用了NPOI组件,首先需要到官网下载最新组件(http://npoi.codeplex.com/)。需要注意的是,NPOI组件也可以实现winform项目的Excel导出。具体实现导出功能的类如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Data; 6 using System.IO; 7 using NPOI; 8 using NPOI.HPSF; 9 using NPOI.HSSF;10 using NPOI.HSSF.UserModel;11 using NPOI.POIFS;12 using NPOI.Util;13 using System.Text;14 15 namespace XX.Common16 {17 public class ExcelHelper18 {19 /// <summary>20 /// 由DataSet导出数据流Stream21 /// </summary>22 /// <param name="sourceDs">要导出数据的DataSet</param>23 /// <param name="sheetName">页签名称</param>24 /// <returns>数据流Stream</returns>25 private static Stream ExportDataSetToExcel(DataSet sourceDs, string sheetName)26 {27 HSSFWorkbook workbook = new HSSFWorkbook();28 MemoryStream ms = new MemoryStream();29 string[] sheetNames = sheetName.Split(‘,‘);30 for (int i = 0; i < sheetNames.Length; i++)31 {32 HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet(sheetNames[i]);33 HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);34 // handling header.35 foreach (DataColumn column in sourceDs.Tables[i].Columns)36 headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);37 // handling value.38 int rowIndex = 1;39 foreach (DataRow row in sourceDs.Tables[i].Rows)40 {41 HSSFRow dataRow = (HSSFRow)sheet.CreateRow(rowIndex);42 foreach (DataColumn column in sourceDs.Tables[i].Columns)43 {44 dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());45 }46 rowIndex++;47 }48 }49 workbook.Write(ms);50 ms.Flush();51 ms.Position = 0;52 workbook = null;53 return ms;54 }55 56 /// <summary>57 /// 由DataSet导出Excel58 /// </summary>59 /// <param name="sourceDs">要导出数据的DataSet</param>60 /// <param name="fileName">指定Excel工作表名称</param>61 /// <param name="sheetName">指定Excel页签名称</param>62 public static void ExportDataSetToExcel(DataSet sourceDs, string fileName, string sheetName)63 {64 MemoryStream ms = ExportDataSetToExcel(sourceDs, sheetName) as MemoryStream;65 string UserAgent = HttpContext.Current.Request.ServerVariables["http_user_agent"].ToLower();66 // Firfox和IE下输出中文名显示正常 67 if (UserAgent.IndexOf("firefox") == -1)68 {69 fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);70 } 71 HttpContext.Current.Response.ContentType = "application/vnd.ms-excel;charset=UTF-8";72 HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);73 HttpContext.Current.Response.BinaryWrite(ms.ToArray());74 HttpContext.Current.Response.End();75 ms.Close();76 ms = null;77 } 78 }79 }
导出Excel方法(winform或web)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。