方法一:循环DataTable单元格内容拼接字符串,利用StreamWriter的Write方法将字符串写入Excel文件中
这种方法很实现很简单。拼接字符串时,每个单元格之间添加'\t'(表示一个占位符,相当于Tab键),每行之间添加"\r\n"(表示换行)。
但是这种方法不能设置Excel单元格样式
1、定义一个方法GetSavePath(),利用SaveFileDialog控件选择Excel文件要保存的路径。
private string GetSavePath() { using (SaveFileDialog savePath = new SaveFileDialog()) { savePath.Title = "选择要保存的路径和文件名"; savePath.Filter = "Excel 97-2003|*.xls"; savePath.RestoreDirectory = true; //是否记录上次选择的路径 savePath.FileName = "导出的表格"; if (savePath.ShowDialog() == DialogResult.OK) { return savePath.FileName; //返回Excel文件的保存路径和名字 } return "Cancel"; } }
2、定义一个方法GetSWstr(),将DataTable内容转换成字符串。
private string GetSWstr(DataTable table2) { StringBuilder strHead = new StringBuilder (); //先添加每列标题 for (int i = 0; i < table2.Columns.Count; i++) { strHead.Append(table2.Columns[i].Caption.Trim() + '\t'); } strHead.Append("\r\n"); //再依次添加每行内容 for (int i = 0; i < table2.Rows.Count; i++) { for (int j = 0; j < table2.Columns.Count; j++) { strHead.Append(table2.Rows[i][j].ToString().Trim() + '\t'); } strHead.Append("\r\n"); } return strHead.ToString(); }
3、定义一个方法 WriteToExcel(),将内容写入Excel文件
public string WriteToExcel(String str, string filePath) { try { using (StreamWriter sw = new StreamWriter(filePath, false, System.Text.Encoding.Default)) //写入流 { sw.Write(str); } return "导出Execl成功!"; } catch (Exception ex) { return "导出Execl失败!原因:" + ex.Message; } }
4、调用WriteToExcel
WriteToExcel(GetSWstr(table), GetSavePath());
方法二:利用COM组件实现Excel操作,可以设置Excel格式
这种操作也很简单,在定义好excel对象后,可以通过 excel.Cells[i, j]=? 对某一个单元格赋值。
也可以通过 range = excel.Range[excel.Cells[i, 1], excel.Cells[i, 3]]; 获取一个单元格区域,然后设置range的属性就可以设置单元格样式或值
range.MergeCells = true; //合并单元格
range.Value = "标题";
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook book = excel.Workbooks.Add(true); Microsoft.Office.Interop.Excel.Range range = null; try { //第一行的第一列到第六列 range = excel.Range[excel.Cells[1, 1], excel.Cells[1, 6]]; range.MergeCells = true; ///合并单元格 range.Font.Bold = true; //黑体 range.Font.Size = 20; //20号字体 range.HorizontalAlignment = XlHAlign.xlHAlignCenter; //水平居中 range.Value = "产品工序分解表"; //合并单元格的值 } catch(Exception ex) { return "导出失败!错误原因:" + ex.Message; } finally { book = null; range = null; GC.Collect(); GC.WaitForPendingFinalizers(); excel.Quit(); excel = null; }