如何处理Excel空行问题
在操作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了.祝大家好运.
如何处理Excel空行问题的更多相关文章
- 在往oracle中插数据时,如何处理excel读取的时间空值
//若从excel中读取的时间值为空值时,做如下转换 string YDKGSJ = string.Empty; if (dbdata.Rows[i]["约定开工时间"].ToSt ...
- 【Python】如何处理Excel中的数据
我们平时在做自动化测试的时候,可能会涉及到从表格中去读取或者存储数据,我们除了可以使用openpyxl来操作excel,当然也可以利用pandas来完成,这篇随笔只是我在学习过程中的简单记录,其他的功 ...
- POI 解析excel 空行问题
https://www.cnblogs.com/interdrp/p/4019583.html
- NPOI读取excel 空行
if (sheet.GetRow(i) != null) 每行判断一下,避免出错.真是蛋疼.
- [NPOI2.0] 使用NPOI读取和导出Excel文件
先来说下一直使用的 Microsoft.Office.Interop.Excel ,在系统正式使用时遇到的问题 1:Excel读取数据BUG 由于使用Microsoft.Office.Interop. ...
- C# 操作Excel图形——绘制、读取、隐藏、删除图形
简介 本篇文章将介绍C# 如何处理Excel图形相关的问题,包括以下内容要点: 1.绘制图形 1.1 绘制图形并添加文本到图形 1.2 添加图片到图形 1.3 设置图形阴影效果 1.4 设置图形透明度 ...
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...
- NPOI读取Excel帮助类,支持xls与xlsx,实现公式解析,空行的处理
NPOI读取Excel(2003或者2010)返回DataTable.支持公式解析,空行处理. /// <summary>读取excel /// 默认第一行为表头 /// </sum ...
- NPOI解决由于excel删除数据导致空行读取问题
1.解决问题思路一:申明判断是否空行变量用于判断是否空行,声明变量数组用于临时非空行数据,最后存于datatable中. /// <summary>读取excel, /// 默认第一行为表 ...
随机推荐
- Android Touch事件相关源码【Android SourceCode 2.3.6】
2018-05-31 17:23:46 Note: 这里的源码来自Android 2.3.6,这个版本的代码比较简单,适合理解Touch事件的传递原理.后续版本源码复杂了很多,但是原理都是类似的. 2 ...
- 【基于微信小程序的社区电商平台】需求分析心得——小豆芽
一.项目内容 基于微信小程序,做一个社区电商平台,抓住社区电商的特点,做出特色,与微信集成,实现商品的个性化发布,以及个性化营销. 个性化发布:用户可以在应用上直接发布自己的商品,通过搜索心愿单可以查 ...
- centos7初上手2-安装tomcat服务
上一篇文章说完安装mysql数据库,这篇文章来学习一下tomcat安装 1.先做准备工作,安装jdk,先看服务器上有没有安装相关java文件 下载好1.8版本的安装包,用xftp传到服务器上(根据个人 ...
- Ruby中puts,print,p的区别
如果字符串的行尾没有包含换行符,puts就会添加一个,但print不会: print会精确打印内容并让光标留在末尾(在某些系统平台,在程序输出的末尾会自动换行): p会输出一个审查字符串,它通常会包含 ...
- Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
题目:http://codeforces.com/contest/1153/problem/D 题意:给你一棵树,每个节点有一个操作,0代表取子节点中最小的那个值,1代表取子节点中最大的值,叶子节点的 ...
- java 两行代码解析json文件
public void JsonRead() throws IOException{ String str = FileUtils.readFileToString(new File("D: ...
- jquery tmpl生成导航
引入<script src="jquery.tmpl.min.js"></script> html<ul class="nav" ...
- 学习C语言,在软件测试中如何用?
1)为什么学? 掌握基础: 编写测试脚本: 自动化: 性能测试: 看懂代码,定位问题(白盒测试). C语言如何开发有界面的程序? 首先给大家扫盲:1 什么叫做界面程序: 归根到底就是设置LCD上的 ...
- python基础—列表的使用[]
names = ['zhangyang','guyun','xiangpeng','xuliangchen']print(names[0])print(names[1:3])#切片print(name ...
- Python 查看线程的进程id
import os from threading import Thread # from multiprocessing import Process def f1(n): print('1号',o ...