加载Excel时,如何过滤空行空列
巨硬为Excel提供了丰富的C#接口,基本上可以将Excel当做一个微型数据库来用,奈何前端的我们,sql也只会写两句select * from table;
目前工作中遇到了一个问题,在需要读取的Excel中,存在大量毫无内容的列和行,C#的Excel空间里,分为有效数据,和占用数据,具体是为了干啥,这个也就不深究了。
如果我们只需要其中有数据的列,无数据的不想加载进内存怎么办呢。下面是我的一个解决方法:
private static DataSet ExcelToDS(string Path)
{
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1'";
using (OleDbConnection conn = new OleDbConnection(strConn))
{
conn.Open();
var tv = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
var completeds = new DataSet();
foreach (DataRow row in tv.Rows)
{
var sheetName = row["TABLE_NAME"].ToString().Trim();
if (sheetName.LastIndexOf('$') != -1)
{
var ds = new DataSet();
var dt = new DataTable();
var strExcel = "select * from [" + row["TABLE_NAME"] + "]";
var myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds);
dt = ds.Tables[0].Copy();
dt.TableName = row["TABLE_NAME"].ToString();
RemoveEmpty(dt);
completeds.Tables.Add(dt);
}
} return completeds;
}
} private static void RemoveEmpty(DataTable dt)
{
var eRow = new List<DataRow>();
var eCol = new List<DataColumn>();
for (var i = 0; i < dt.Rows.Count; ++i)
{
if (string.IsNullOrWhiteSpace(dt.Rows[i][0].ToString()))
eRow.Add(dt.Rows[i]);
}
for (var i = 0; i < dt.Columns.Count; ++i)
{
if (dt.Rows.Count > 0)
{
if (string.IsNullOrWhiteSpace(dt.Rows[0][i].ToString()))
eCol.Add(dt.Columns[i]);
}
}
foreach (var r in eRow)
dt.Rows.Remove(r);
foreach (var c in eCol)
dt.Columns.Remove(c);
}
直接遍历一次,在内存中删了就是了。鄙人只能想到如此暴力的手法,有更好方法的,欢迎指教。
加载Excel时,如何过滤空行空列的更多相关文章
- 个人永久性免费-Excel催化剂功能第32波-空行空列批量插入和删除
批量操作永远是效率提升的王道,也是Excel用户们最喜欢能够实现的操作虽说有些批量操作不一定合适Excel的最佳实践操作,但万千世界,无奇不有,特别是在国人眼中领导最大的等级森严的职场环境下.Exce ...
- Spire.XLS,生成Excel文件、加载Excel文件
一.组件介绍 Spire.XLS是E-iceblue开发的一套基于企业级的专业Office文档处理的组件之一,全称Spire.Office for .NET.旗下有Spire.Doc,Spire XL ...
- 用C3中的animation和transform写的一个模仿加载的时动画效果
用用C3中的animation和transform写的一个模仿加载的时动画效果! 不多说直接上代码; html标签部分 <div class="wrap"> <h ...
- seajs加载jquery时提示$ is not a function该怎么解决
这篇文章主要介绍了seajs加载jquery时提示$ is not a function该怎么解决的相关资料,需要的朋友可以参考下 jquery1.7以上的都支持模块化加载,只是jquery默认的是支 ...
- Struts2配置拦截器,struts2加载常量时的搜索顺序
1:struts2加载常量时的搜索顺序 1.Struts-default.xml 2.Struts-plugin.xml 3.Struts.xml 4.Struts-properties(自己创建的) ...
- Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果
Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...
- 加载驱动模块时Device or resource busy的解决方法
加载驱动模块时Device or resource busy的解决方法 加载驱动模块时Device or resource busy的解决方法 insmod或modprobe驱动模块时Device o ...
- Unity3D基础学习 加载场景时隐藏物体,点击显示时显示物体
隐藏物体有两种方法,一是设置Meshrender为False,即不渲染物体. 二是设置物体为False,禁用物体,我使用的第二种. 当场景中需要隐藏的物体很多时,我们可以添加一个层来表示需要隐藏的物体 ...
- 解决easyui datagrid加载数据时,checkbox列没有根据checkbox的值来确定是否选中
背景: 昨天帮朋友做一个easyui datagrid的小实例时,才发现easyui datagrid的checkbox列,没有根据值为true或false来选中checkbox,当时感觉太让人失 ...
随机推荐
- C语言:递归函数n!
#include <stdio.h> long recursion(int n); void main(){ int n; long result; printf("input ...
- 《浅析:java不支持多继承的原因》
很久以前,博主的一个好朋友给我考了我一个问题,为什么Java不支持多继承,如果多继承会有什么错误.这个问题困扰了我很久,我从单继承方面去推导过,又从多态的层面去思考过,但都无法解释为什么Java不支持 ...
- 5、AngularJS 直接绑定显示html ($sce、$sanitize服务)
1.直接使用$sce服务(angularjs中:$sce.trustAsHtml($scope.snippet).html:ng-bind-html="snippet") 以下代码 ...
- Adversarial Examples for Semantic Segmentation and Object Detection 阅读笔记
Adversarial Examples for Semantic Segmentation and Object Detection (语义分割和目标检测中的对抗样本) 作者:Cihang Xie, ...
- 小程序 map组件问题 cover-view问题
使用小程序的组件map时 在开发者工具上一切顺利 但是在真机预览时 发现地图的层级是最高的 任何标签都覆盖不了它 调整z-index值并没有什么效果 原因是 微信小程序的map.video.canva ...
- Python第四章(北理国家精品课 嵩天等)
一.程序的分支结构 二.身体质量指数BMI #CalBIv1.py height,weight = eval((input("请输入身高(米)和体重\(公斤)[逗号隔开]:"))) ...
- Phone 3rd Recovery
#解锁之后会低级格式化,请做好相关备份.1.#unlock code#2.adb reboot-bootloader3.fastboot devices4.fastboot oem unlock ** ...
- java实现截图功能
package Jietu; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import j ...
- Ricker wavelet 简介
本文依照参考文献简介 Ricker wavelet . 参考: [1] Frequency of the Ricker wavelet DOI: 10.1190/GEO2014-0441.1 [2] ...
- Github远程仓库提交代码步骤
1.克隆远程仓库 1)当没有设置默认目录时 git clone 仓库地址 本地存放目录 //没有目录的情况 2)当设置了本地存放目录时 先打开路径,命令: ...