需要添加引用  Microsoft.Office.Interop.Excel

注意:使用Microsoft.Office.Interop.Excel 非常耗时。对性能有要求建议用其他。

如果要用,把数据转成字符串拷贝到剪贴板中,然后把剪贴板数据粘贴到sheet表中即可,几十万数据秒级。下面有讲到怎么转换字符串拷贝与粘贴。

代码部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; /******************************************************************* 
* Copyright (C)  版权所有
* 文件名称:ExcelManage
* 命名空间:WindowsFormsApplication3
* 创建时间:2019/3/4 15:20:27
* 作    者: wangyonglai
* 描    述:
* 修改记录:
* 修改人:
* 版 本 号:v1.0.0
**********************************************************************/
namespace WindowsFormsApplication3
{
//替代名称
using Excel = Microsoft.Office.Interop.Excel;//替代名称
using Missing = System.Reflection.Missing;
class ExcelManage
{
public System.Data.DataSet dataSet = new System.Data.DataSet(); public void InitalTable()
{
System.Data.DataTable table = new System.Data.DataTable();
table.Columns.Add("序号", typeof(int));
table.Columns.Add("数据1", typeof(int));
table.Columns.Add("数据2", typeof(int));
Random r = new Random();
for (int i = 0; i < 200; i++)
{
if (i == 6 || i == 16) continue;
table.Rows.Add(i + 1, r.Next(50), r.Next(60));
} dataSet.Tables.Add(table); //ExportExcel(dataSet);
} public void ExportExcel(System.Data.DataSet ds)
{
//新建EXCEL应用
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
return; //设置为不可见,操作在后台执行,为 true 的话会打开 Excel
excelApp.Visible = false;
//初始化工作簿
Excel.Workbooks workbooks = excelApp.Workbooks;
//新增加一个工作簿,Add()方法也可以直接传入参数 true
//Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
//同样是新增一个工作簿,但是会弹出保存对话框
Excel.Workbook workbook = workbooks.Add(true); //Excel.Worksheet c_worksheet = workbook.Worksheets[1];
//int a = workbook.Worksheets.Count; //workbook.Sheets.Add(Missing.Value, workbook.Sheets[1], ds.Tables.Count - 1, Missing.Value); for (int index = 0; index < ds.Tables.Count; index++)
{
System.Data.DataTable dt = ds.Tables[index];
Excel.Worksheet worksheet = workbook.Worksheets.Add();
//Excel.Worksheet worksheet = workbook.Worksheets[index + 1]; //创建一个单元格
Excel.Range range;
int rowIndex = 1; //行的起始下标为 1
int colIndex = 1; //列的起始下标为 1
for (int i = 0; i < dt.Columns.Count; i++)
{
//设置第一行,即列名
worksheet.Cells[rowIndex, colIndex + i] = dt.Columns[i].ColumnName;
//获取第一行的每个单元格
range = worksheet.Cells[rowIndex, colIndex + i];
//字体加粗
range.Font.Bold = true;
//设置为黑色
range.Font.Color = 0;
//设置为宋体
range.Font.Name = "Arial";
//设置字体大小
range.Font.Size = 12;
//水平居中
range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
//垂直居中
range.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter; }
//跳过第一行,第一行写入了列名
rowIndex++;
//写入数据
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
worksheet.Cells[rowIndex + i, colIndex + j] = dt.Rows[i][j].ToString(); range = worksheet.Cells[rowIndex + i, colIndex + j];
range.Interior.Color = System.Drawing.Color.Yellow;
range.Cells.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
range.Borders.Weight = Excel.XlBorderWeight.xlHairline;//边框常规粗细
}
} //设置所有单元格列宽为自动列宽
worksheet.Cells.Columns.AutoFit(); #region 冻结行 worksheet.Select();
excelApp.ActiveWindow.SplitRow = 1;
excelApp.ActiveWindow.SplitColumn = 0;
excelApp.ActiveWindow.FreezePanes = true; #endregion #region 合并行
//Excel.Range mergeRange = worksheet.get_Range("A25", "B25");
//mergeRange.Merge();
/////合并单元格之后,设置其中的文本
//mergeRange.Value = "mergeRange"; #endregion #region 绘制CHART图表
int num = dt.Rows.Count + 1;
Excel.Chart xlChart = workbook.Charts.Add(Missing.Value, Missing.Value, 1, Missing.Value);
Excel.Range ranges1 = worksheet.Cells[1, 1];
Excel.Range ranges2 = worksheet.Cells[num, dt.Columns.Count];
Excel.Range chartRage = worksheet.get_Range(ranges1, ranges2); xlChart.ChartWizard(chartRage, Excel.XlChartType.xlLine, Missing.Value,
Excel.XlRowCol.xlColumns, 1, 1,
Missing.Value, Missing.Value, "X值", "Y值", Missing.Value); workbook.ActiveChart.HasTitle = true;
workbook.ActiveChart.ChartTitle.Text = "图表名称";
workbook.ActiveChart.HasDataTable = false;
//给图表放在指定位置
//workbook.ActiveChart.Location(Excel.XlChartLocation.xlLocationAsObject, worksheet.Name); xlChart.Name = "CC1";
#endregion //workbook.Worksheets.Item( } //是否提示,如果想删除某个sheet页,首先要将此项设为fasle。
excelApp.DisplayAlerts = false; //保存写入的数据,这里还没有保存到磁盘
workbook.Saved = true; workbook.SaveCopyAs(@"C:\Users\Lenovo\Desktop\sample.xlsx");
workbook.Close();
excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); workbook = null;
//worksheet = null;
//shapeSheet = null;
excelApp = null;
GC.Collect();
}
}
}

  

效果

最后由于此方法写入时非常耗时,我们可以采用先把数据转成字符串拷贝到剪贴板中,然后在复制到sheet表中,这样十万数据只要几秒钟

代码

public void ExportExcel()
{
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("序号", typeof(int));
dt.Columns.Add("数据1", typeof(int));
dt.Columns.Add("数据2", typeof(int));
Random r = new Random();
for (int i = 0; i < 20000; i++)
{
if (i == 6 || i == 16) continue;
dt.Rows.Add(i + 1, r.Next(50), r.Next(60));
} StringBuilder strbu = new StringBuilder(); //写入标题
for (int i = 0; i < dt.Columns.Count; i++)
{
strbu.Append(dt.Columns[i].ColumnName.ToString() + "\t");
} //加入换行字符串
strbu.Append(Environment.NewLine);
//写入内容
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
strbu.Append(dt.Rows[i][j].ToString() + "\t");
}
strbu.Append(Environment.NewLine);
} System.Windows.Forms.Clipboard.SetText(strbu.ToString()); //新建EXCEL应用
Excel.Application excelApp = new Excel.Application();
if (excelApp == null)
return; //设置为不可见,操作在后台执行,为 true 的话会打开 Excel
excelApp.Visible = false;
//初始化工作簿
Excel.Workbooks workbooks = excelApp.Workbooks;
//新增加一个工作簿,Add()方法也可以直接传入参数 true
Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
//同样是新增一个工作簿,但是会弹出保存对话框
//Excel.Workbook workbook = workbooks.Add(true); //Excel.Worksheet worksheet = workbook.Worksheets[1];
Excel.Worksheet worksheet = workbook.Worksheets.Add(); //Excel.Range ranges1 = worksheet.Cells[1, 1];
//Excel.Range ranges2 = worksheet.Cells[dt.Rows.Count + 1, dt.Columns.Count];
//Excel.Range chartRage = worksheet.get_Range(ranges1, ranges2);
//Excel.Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[dt.Rows.Count+1, dt.Columns.Count]);
//chartRage.Copy(strbu.ToString());
//ranges1.Value = System.Windows.Forms.Clipboard.GetText();
//worksheet.Activate();
worksheet.Paste();
//worksheet.PasteSpecial(System.Windows.Forms.Clipboard.GetText(), false, false); //新建一个 Excel 文件
string filePath = @"C:\Users\Lenovo\Desktop\" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx";
//创建文件
FileStream file = new FileStream(filePath, FileMode.CreateNew);
//关闭释放流,不然没办法写入数据
file.Close();
file.Dispose(); //保存写入的数据,这里还没有保存到磁盘
workbook.Saved = true;
//保存到指定的路径
workbook.SaveCopyAs(filePath);
}

  

 private void WriteDataToExcel
{
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
DataTable dataTable1 = this.GetTabel1();//获取表格2 Microsoft.Office.Interop.Excel.Application excelApp;
Microsoft.Office.Interop.Excel._Workbook workBook;
Microsoft.Office.Interop.Excel._Worksheet workSheet;
Microsoft.Office.Interop.Excel._Worksheet workSheet1;
object misValue = System.Reflection.Missing.Value;
workBook = excelApp.Workbooks.Add(misValue);//加载模型 workSheet = (Microsoft.Office.Interop.Excel._Worksheet)workBook.Sheets.get_Item();//第一个工作薄。 workSheet1 = (Microsoft.Office.Interop.Excel._Worksheet)workBook.Sheets.get_Item(); int rowIndex = ;
int colIndex = ;
foreach (DataRow row in dataTable.Rows)
{
rowIndex++;
colIndex = ;
foreach (DataColumn col in dataTable.Columns)
{
colIndex++;
workSheet.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString().Trim(); }
} rowIndex = ;
colIndex = ;
foreach (DataRow row in dataTable1.Rows)
{
rowIndex++;
colIndex = ;
foreach (DataColumn col in dataTable1.Columns)
{
colIndex++;
workSheet1.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString().Trim(); }
}         
       workSheet.Protect("MyPassword", Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, true, Type.Missing, Type.Missing); //保护工作表
workSheet1.Protect("MyPassword", Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, true, Type.Missing, Type.Missing); /**/ excelApp.Visible = false; workBook.SaveAs(@"D:\outputFormDataBase1.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue,
misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
misValue, misValue, misValue, misValue, misValue); dataTable = null; workBook.Close(true, misValue, misValue); excelApp.Quit(); PublicMethod.Kill(excelApp);//调用kill当前excel进程 }

有兴趣的可以看看 https://www.cnblogs.com/junshijie/p/5292087.html 这篇文章,里面有更详细如何操作EXCEL

最新文章

  1. 使用charles V3.11.2 实现SSL抓包
  2. Hammer.js手势库 安卓4.0.4上的问题
  3. jboss eap 6.3 域(Domain)模式配置
  4. 本地自定义了404 和500 错误处理 部署到IIS上显示 服务器内部错误
  5. mvn 配置修改
  6. Java IO(四)
  7. WordPress搭建Personal Blog 个人博客
  8. 3D视频可能出现的质量问题 (MSU出品)
  9. chord原理的解读
  10. three.js 源代码凝视(十六)Math/Frustum.js
  11. 2_认识STM32库
  12. mser 最大稳定极值区域(文字区域定位)算法 附完整C代码
  13. UML之状态图
  14. 【转载】阿里云ECS Linux服务器禁止某些IP访问
  15. vue使用axios请求后端数据
  16. 关于js渲染网页时爬取数据的思路和全过程(附源码)
  17. Python复习笔记(一)高级变量类型
  18. 【Android】Android开源项目精选(一)
  19. 【转】启动tomcat的时候一直卡在INFO: Deploying web application
  20. fiddler自动保存请求报文

热门文章

  1. 转载spring restemplate
  2. MySQL创建函数报“ERROR 1418 ”错误,不能创建函数
  3. jQuery+SpringMVC中的复选框选择与传值
  4. halcon控制显示精度(精确到小数点后6位,精度足够了)
  5. 10个免费的在线Markdown编辑器
  6. forbidden Derby database starting with weblogic instance
  7. 02-SSH综合案例:需求分析(后台)
  8. UISearchDisplayController 阴影遮盖frame调整
  9. tomcat 403 forbidden
  10. Master节点部署