在操作excel的时候, 可能会出现很多的无效数据行. 下面是一个我的简单处理方式

         public static bool DataSetToExcel(DataSet dataSet, string fileName)
{
//建立Excel对象
var excel = new Microsoft.Office.Interop.Excel.Application();
var objBook = excel.Workbooks.Open(fileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
excel.Visible = false;
var worksheet = (Microsoft.Office.Interop.Excel.Worksheet)objBook.Worksheets["data"];
DataTable dataTable = DT(dataSet.Tables);
int rowNumber = dataTable.Rows.Count;//不包括字段名
int columnNumber = dataTable.Columns.Count;
int colIndex = ;
int emptyBlockCount = ;
//生成字段名称
foreach (DataColumn col in dataTable.Columns)
{
colIndex++;
excel.Cells[, colIndex] = col.ColumnName;
}
for (int r = ; r < rowNumber; r++)
{
for (int c = ; c < columnNumber; c++)
{
worksheet.Cells[r + , c + ] = dataTable.Rows[r][c];
}
if (string.IsNullOrWhiteSpace(dataTable.Rows[r][].ToString()))
emptyBlockCount++;
// 如果有10个空行,跳过
if (emptyBlockCount > )
break;
} objBook.Save();
objBook.Close();
excel.Quit(); return true;
}

暴力的通过记录空行数量,进行抉择.

如果哪位有更好的方法,请不吝赐教.

excel在关闭的时候,可能会出现不能及时关闭的问题.

         [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId); int lpdwProcessId;
GetWindowThreadProcessId(new IntPtr(excel.Hwnd), out lpdwProcessId);
System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill();

通过Windows的系统函数,强制杀掉进程.

在操作excel的过程中,最好单独开一个线程来做这些事情.经过我的尝试.一个拥有200个有效单元格的excel,就需要30秒以上的时间来更新.

如果放在主线程中,基本就GG了.祝大家好运.

最新文章

  1. TPC-H
  2. CLion 2016.2.2 注册激活码
  3. CSS3-box-flex弹性盒布局
  4. wxPython简单入门
  5. 关于TCP传输速率的测量方法
  6. IOS开发中AVFoundation中AVAudioPlayer的使用
  7. Bash内置命令
  8. webpack-dev-server报错
  9. VIM 与 系统剪切版
  10. Python全局解释器锁 -- GIL
  11. 第 14 章 结构和其他数据形式(names)
  12. vue中的this指向问题
  13. 前端如何使用easy-mock模拟接口
  14. Linux-文件目录命令
  15. 树莓派3B+学习笔记:7、挂载exfat格式U盘
  16. java实现 数组中两个元素相加等于指定数的所有组合
  17. I/O完成端口(IOCP)
  18. jQuery实现轮播切换以及将其封装成插件(2)
  19. [转]springmvc常用注解标签详解
  20. Mysql数据库操作语句总结(一)

热门文章

  1. tinyproxy代理配置
  2. JS案例六_1:添加城市
  3. jmert中如何测试上传文件接口(测试上传excel文件)
  4. io复用select方法编写的服务器
  5. AsyncTask RejectedExecutionException 小结
  6. ionic2APP 如何处理返回键问题
  7. css实现标题左右横线
  8. Vue源码之 Vue的生命周期
  9. 判断浏览器大于等于ie9
  10. javascript 字符串处理