生成EXCEL文件是经常需要用到的功能,我们利用一些开源库可以很容易实现这个功能。

方法一:利用excellibraryhttp://code.google.com/p/excellibrary/

excellibrary是国人写的开源组件,很容易使用,可惜貌似还不支持.xlsx(Excel 2007),例子如下:

  1. //Create the data set and table
  2. DataSet ds = new DataSet("New_DataSet");
  3. DataTable dt = new DataTable("New_DataTable");
  4. //Set the locale for each
  5. ds.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
  6. dt.Locale = System.Threading.Thread.CurrentThread.CurrentCulture;
  7. //Open a DB connection (in this example with OleDB)
  8. OleDbConnection con = new OleDbConnection(dbConnectionString);
  9. con.Open();
  10. //Create a query and fill the data table with the data from the DB
  11. string sql = "SELECT Whatever FROM MyDBTable;";
  12. OleDbCommand cmd = new OleDbCommand(sql, con);
  13. OleDbDataAdapter adptr = new OleDbDataAdapter();
  14. adptr.SelectCommand = cmd;
  15. adptr.Fill(dt);
  16. con.Close();
  17. //Add the table to the data set
  18. ds.Tables.Add(dt);
  19. //Here's the easy part. Create the Excel worksheet from the data set
  20. ExcelLibrary.DataSetHelper.CreateWorkbook("MyExcelFile.xls", ds);

  

例子二:

  1. //create new xls file
  2. string file = "C:\\newdoc.xls";
  3. Workbook workbook = new Workbook();
  4. Worksheet worksheet = new Worksheet("First Sheet");
  5. worksheet.Cells[, ] = new Cell((short));
  6. worksheet.Cells[, ] = new Cell();
  7. worksheet.Cells[, ] = new Cell((decimal)3.45);
  8. worksheet.Cells[, ] = new Cell("Text string");
  9. worksheet.Cells[, ] = new Cell("Second string");
  10. worksheet.Cells[, ] = new Cell(32764.5, "#,##0.00");
  11. worksheet.Cells[, ] = new Cell(DateTime.Now, @"YYYY\-MM\-DD");
  12. worksheet.Cells.ColumnWidth[, ] = ;
  13. workbook.Worksheets.Add(worksheet);
  14. workbook.Save(file);
  15. // open xls file
  16. Workbook book = Workbook.Load(file);
  17. Worksheet sheet = book.Worksheets[];
  18. // traverse cells
  19. foreach (Pair<Pair<int, int>, Cell> cell in sheet.Cells)
  20. {
  21. dgvCells[cell.Left.Right, cell.Left.Left].Value = cell.Right.Value;
  22. }
  23. // traverse rows by Index
  24. for (int rowIndex = sheet.Cells.FirstRowIndex;
  25. rowIndex <= sheet.Cells.LastRowIndex; rowIndex++)
  26. {
  27. Row row = sheet.Cells.GetRow(rowIndex);
  28. for (int colIndex = row.FirstColIndex;
  29. colIndex <= row.LastColIndex; colIndex++)
  30. {
  31. Cell cell = row.GetCell(colIndex);
  32. }
  33. }

方法二:利用EPPlus,http://epplus.codeplex.com/
EPPlus是一个使用Open Office XML(xlsx)文件格式,能读写Excel 2007/2010 文件的开源组件。
例子如下:

  1. var file = @"Sample.xlsx";
  2. if (File.Exists(file)) File.Delete(file);
  3. using (var excel = new ExcelPackage(new FileInfo(file)))
  4. {
  5. var ws = excel.Workbook.Worksheets.Add("Sheet1");
  6. ws.Cells[1, 1].Value = "Date";
  7. ws.Cells[1, 2].Value = "Price";
  8. ws.Cells[1, 3].Value = "Volume";
  9. var random = new Random();
  10. for (int i = 0; i < 10; i++)
  11. {
  12. ws.Cells[i + 2, 1].Value = DateTime.Today.AddDays(i);
  13. ws.Cells[i + 2, 2].Value = random.NextDouble() * 1e3;
  14. ws.Cells[i + 2, 3].Value = random.Next() / 1e3;
  15. }
  16.  
  17. ws.Cells[2, 1, 11, 1].Style.Numberformat.Format = "dd/MM/yyyy";
  18. ws.Cells[2, 2, 11, 2].Style.Numberformat.Format = "#,##0.000000";
  19. ws.Cells[2, 3, 11, 3].Style.Numberformat.Format = "#,##0";
  20. ws.Column(1).AutoFit();
  21. ws.Column(2).AutoFit();
  22. ws.Column(3).AutoFit();
  23. excel.Save();
  24. }

  

例子二:

  1. using OfficeOpenXml;
  2. //指定Templete文档Text.xlsx
  3. FileInfo newFile = new FileInfo("D:" + @"\Test.xlsx");
  4. //开启
  5. using (ExcelPackage pck = new ExcelPackage(newFile))
  6. {
  7. try
  8. {
  9. //设定ExcelWorkBook
  10. ExcelWorkbook workBook = pck.Workbook;
  11. if (workBook != null)
  12. {
  13. if (workBook.Worksheets.Count > 0)
  14. {
  15. //复制Temp这个Sheet同时命名为《清单》
  16. ExcelWorksheet currentWorksheet = workBook.Worksheets.Copy("Temp", "清单");
  17. //可以设定保护Sheet的密码
  18. //currentWorksheet.Protection.SetPassword("1234");
  19. int StartRow = 4;
  20. for (int i = 0; i < tDS.Tables[0].Rows.Count; i++)
  21. {
  22. //Cells[RowIndex,CellIndex]
  23. currentWorksheet.Cells[StartRow + i, 1].Value = Convert.ToString(tDS.Tables[0].Rows[i][0]);
  24. currentWorksheet.Cells[StartRow + i, 2].Value = Convert.ToString(tDS.Tables[0].Rows[i][1]);
  25. currentWorksheet.Cells[StartRow + i, 3].Value = Convert.ToString(tDS.Tables[0].Rows[i][2]);
  26. currentWorksheet.Cells[StartRow + i, 4].Value = Convert.ToString(tDS.Tables[0].Rows[i][3]);
  27. currentWorksheet.Cells[StartRow + i, 5].Value = Convert.ToString(tDS.Tables[0].Rows[i][4]);
  28. currentWorksheet.Cells[StartRow + i, 6].Value = Convert.ToString(tDS.Tables[0].Rows[i][5]);
  29. currentWorksheet.Cells[StartRow + i, 7].Value = Convert.ToString(tDS.Tables[0].Rows[i][6]);
  30. currentWorksheet.Cells[StartRow + i, 8].Value = Convert.ToString(tDS.Tables[0].Rows[i][7]);
  31. currentWorksheet.Cells[StartRow + i, 9].Value = Convert.ToString(tDS.Tables[0].Rows[i][8]);
  32. currentWorksheet.Cells[StartRow + i, 10].Value = Convert.ToString(tDS.Tables[0].Rows[i][9]);
  33. currentWorksheet.Cells[StartRow + i, 11].Value = Convert.ToString(tDS.Tables[0].Rows[i][10]);
  34. currentWorksheet.Cells[StartRow + i, 12].Value = Convert.ToString(tDS.Tables[0].Rows[i][11]);
  35. currentWorksheet.Cells[StartRow + i, 13].Value = Convert.ToString(tDS.Tables[0].Rows[i][12]);
  36. }
  37. //将Temp 这个Sheet删除
  38. workBook.Worksheets.Delete("Temp");
  39. }
  40. }
  41. //存至Text4.xlsx
  42. pck.SaveAs(new FileInfo("H:" + @"\Test4.xlsx"));
  43. }
  44. catch (Exception e)
  45. {
  46. oLogger.Fatal(e.ToString());
  47. }
  48. }

  

方法三:NPOI http://npoi.codeplex.com/
NPOI无需Office COM组件且不依赖Office,使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc, ppt等。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。
被人称为操作EXCEL的终极方案,例子如下:

  1. //引用
  2. using NPOI.HSSF.UserModel;
  3. using NPOI.HPSF;
  4. using NPOI.POIFS.FileSystem;
  5. using NPOI.SS.UserModel;
  6. //将WorkBook指到我们原本设计好的Templete Book1.xls
  7. using (IWorkbook wb = new HSSFWorkbook(new FileStream("D:/Book1.xls", FileMode.Open)))
  8. {
  9. try
  10. {
  11. //设定要使用的Sheet为第0个Sheet
  12. ISheet TempSheet = wb.GetSheetAt(0);
  13. int StartRow = 4;
  14. //tDS为Query回来的资料
  15. for (int i = 0; i < tDS.Tables[0].Rows.Count; i++)
  16. {
  17. //第一个Row要用Create的
  18. TempSheet.CreateRow(StartRow + i).CreateCell(0).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][0]));
  19. //第二个Row之后直接用Get的
  20. TempSheet.GetRow(StartRow + i).CreateCell(1).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][1]));
  21. TempSheet.GetRow(StartRow + i).CreateCell(2).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][2]));
  22. TempSheet.GetRow(StartRow + i).CreateCell(3).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][3]));
  23. TempSheet.GetRow(StartRow + i).CreateCell(4).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][4]));
  24. TempSheet.GetRow(StartRow + i).CreateCell(5).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][5]));
  25. TempSheet.GetRow(StartRow + i).CreateCell(6).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][6]));
  26. TempSheet.GetRow(StartRow + i).CreateCell(7).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][7]));
  27. TempSheet.GetRow(StartRow + i).CreateCell(8).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][8]));
  28. TempSheet.GetRow(StartRow + i).CreateCell(9).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][9]));
  29. TempSheet.GetRow(StartRow + i).CreateCell(10).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][10]));
  30. TempSheet.GetRow(StartRow + i).CreateCell(11).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][11]));
  31. TempSheet.GetRow(StartRow + i).CreateCell(12).SetCellValue(Convert.ToString(tDS.Tables[0].Rows[i][12]));
  32. }
  33. //将文档写到指定位置
  34. using (FileStream file = new FileStream("H:/Test_NPOI4.xls", FileMode.Create))
  35. {
  36. wb.Write(file);
  37. file.Close();
  38. file.Dispose();
  39. }
  40. }
  41. catch (Exception e)
  42. {
  43. string a = e.ToString();
  44. }
  45. }

  

C#创建Excel(.xls和.xlsx)文件的三种方法的更多相关文章

  1. 如何使用Java创建Excel(.xls 和 .xlsx)文件 并写入数据

    1,需要依赖的jar包, <!-- POI(operate excel) start --> <!-- the version of the following POI packag ...

  2. C# 操作 Excel(.xls和.xlsx)文件

    C#创建Excel(.xls和.xlsx)文件的三种方法 .NET 使用NPOI导入导出标准Excel C# 使用NPOI 实现Excel的简单导入导出 NET使用NPOI组件将数据导出Excel-通 ...

  3. python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)

    # python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...

  4. VC中加载LIB库文件的三种方法

    VC中加载LIB库文件的三种方法 在VC中加载LIB文件的三种方法如下: 方法1:LIB文件直接加入到工程文件列表中   在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中&quo ...

  5. php将数组写入到文件的三种方法

    php将数组原样写入或保存到文件有三种方法可以实现, 第一种方法是使用serialize, 第二种方法是使用print_r, 第三种方法是使用var_export, 本文章向大家介绍这三种方法是如何将 ...

  6. Node.js写文件的三种方法

    Node.js写文件的三种方式: 1.通过管道流写文件 采用管道传输二进制流,可以实现自动管理流,可写流不必当心可读流流的过快而崩溃,适合大小文件传输(推荐) var readStream = fs. ...

  7. Logstash处理json格式日志文件的三种方法

    假设日志文件中的每一行记录格式为json的,如: {"Method":"JSAPI.JSTicket","Message":"JS ...

  8. Python实现下载文件的三种方法

    下面来看看三种方法是如何来下载zip文件的:方法一: import urllib print "downloading with urllib" url = 'http://www ...

  9. Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法

      Technical Q&A QA1914 Viewing the interface of your Swift code Q:  How do I view the interface ...

随机推荐

  1. ASP.NET Core 中文文档 第二章 指南(4.6)Controller 方法与视图

    原文:Controller methods and views 作者:Rick Anderson 翻译:谢炀(Kiler) 校对:孟帅洋(书缘) .张仁建(第二年.夏) .许登洋(Seay) .姚阿勇 ...

  2. iOS Interface Builder:在.xib文件中加载另一个.xib文件

    在开发中,经常会用到一个需要重复使用的模块,比如好友列表中每个用户的展示或每条动态,这些都是相同的模版,这样我们就可以把这个部分提取出来放到一个单独的.xib中.那么提取出的.xib如何在其他.xib ...

  3. Hive技术架构

    一.Hive概念 Facebook为了解决海量日志数据的分析而开发了Hive,Hive是一种用SQL语句来读写.管理存储在分布式存储设备上的大数据集的数据仓库框架. 1. 数据是存储在HDFS上的,H ...

  4. 在公有云AZURE上部署私有云AZUREPACK以及WEBSITE CLOUD(三)

    (三) 搭建Windows Azure Pack环境 1安装SQL SERVER 2012 服务器 为简单起见,本例直接使用了Azure提供的具有SQLServer的Win2012 Server镜像来 ...

  5. Java内部类final语义实现

    本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...

  6. 利用Spring AOP机制拦截方法一例

    直接上代码: @Aspect // for aop @Component // for auto scan @Order(0) // execute before @Transactional pub ...

  7. Java操作wkhtmltopdf实现Html转PDF

    做java开发的都知道,java生成pdf大部分都是用itext,itext的确是java开源组件的第一选择.不过itext也有局限,就是要自己写模版,系统中的表单数量有好几百个,为每个表单做一个导出 ...

  8. Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境【转】

    项目建设完成之后的结构: 数据库的表结构如下: 环境建设:搭建Maven环境.Tomcat环境.需要MySql 数据库支持,使用的编程工具Eclipse (这些是前期准备): 开始创建工程: 1.创建 ...

  9. 【shadow dom入UI】web components思想如何应用于实际项目

    回顾 经过昨天的优化处理([前端优化之拆分CSS]前端三剑客的分分合合),我们在UI一块做了几个关键动作: ① CSS入UI ② CSS作为组件的一个节点而存在,并且会被“格式化”,即选择器带id前缀 ...

  10. 强大的observejs

    写在前面 各大MVVM框架的双向绑定太难以观察,很难直观地从业务代码里知道发生了什么,我不是双向绑定的反对者,只是认为双向绑定不应该糅合进底层框架,而应该出现在业务代码中,或者是业务和框架之间的代码上 ...