巨硬为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时,如何过滤空行空列的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第32波-空行空列批量插入和删除

    批量操作永远是效率提升的王道,也是Excel用户们最喜欢能够实现的操作虽说有些批量操作不一定合适Excel的最佳实践操作,但万千世界,无奇不有,特别是在国人眼中领导最大的等级森严的职场环境下.Exce ...

  2. Spire.XLS,生成Excel文件、加载Excel文件

    一.组件介绍 Spire.XLS是E-iceblue开发的一套基于企业级的专业Office文档处理的组件之一,全称Spire.Office for .NET.旗下有Spire.Doc,Spire XL ...

  3. 用C3中的animation和transform写的一个模仿加载的时动画效果

    用用C3中的animation和transform写的一个模仿加载的时动画效果! 不多说直接上代码; html标签部分 <div class="wrap"> <h ...

  4. seajs加载jquery时提示$ is not a function该怎么解决

    这篇文章主要介绍了seajs加载jquery时提示$ is not a function该怎么解决的相关资料,需要的朋友可以参考下 jquery1.7以上的都支持模块化加载,只是jquery默认的是支 ...

  5. Struts2配置拦截器,struts2加载常量时的搜索顺序

    1:struts2加载常量时的搜索顺序 1.Struts-default.xml 2.Struts-plugin.xml 3.Struts.xml 4.Struts-properties(自己创建的) ...

  6. Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果

     Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...

  7. 加载驱动模块时Device or resource busy的解决方法

    加载驱动模块时Device or resource busy的解决方法 加载驱动模块时Device or resource busy的解决方法 insmod或modprobe驱动模块时Device o ...

  8. Unity3D基础学习 加载场景时隐藏物体,点击显示时显示物体

    隐藏物体有两种方法,一是设置Meshrender为False,即不渲染物体. 二是设置物体为False,禁用物体,我使用的第二种. 当场景中需要隐藏的物体很多时,我们可以添加一个层来表示需要隐藏的物体 ...

  9. 解决easyui datagrid加载数据时,checkbox列没有根据checkbox的值来确定是否选中

    背景:   昨天帮朋友做一个easyui datagrid的小实例时,才发现easyui datagrid的checkbox列,没有根据值为true或false来选中checkbox,当时感觉太让人失 ...

随机推荐

  1. Linux 文件系统(一)---虚拟文件系统VFS----超级块、inode、dentry、file

    转自:http://blog.csdn.net/shanshanpt/article/details/38943731 http://elixir.free-electrons.com/linux/v ...

  2. dubbo-admin 配置运行

    1.下载dubbo源码:http://dubbo.io/ 2.idea 导入maven项目 3.配置tomcat:http://localhost:8080/ 4.下载zookeeper:http:/ ...

  3. 把玩Fedora29操作系统

    reference:   https://ask.csdn.net/questions/657608 1.下载Fedora服务器版操作系统 https://getfedora.org/zh_CN/se ...

  4. kafka producer 0.8.2.1 示例

    package test_kafka; import java.util.Properties; import java.util.concurrent.atomic.AtomicInteger; i ...

  5. 简单的OO ALV小示例

    OO ALV即面向对象ALV,是在屏幕上显示的一种可以自定义大小的ALV.它区别普通ALV的优点是可以多个ALV出现在同一个屏幕,也可以同其他屏幕元素同时出现在同一个屏幕. 示例展示: 1. 进入实用 ...

  6. 初学者如何迅速学习web前端开发

    首先告诉你的是,零基础学习开始学习web前端肯定难,web前端的专业程度本身就不简单,学习这事本来就是一件非常煎熬的事情,人都不愿意学习,可是没办法,为了生存掌握一个技能,你必须学,如果你认真的对待, ...

  7. TypeError: format string

    先来看一段Python代码: class Negate: def __init__(self, val): self.val = -val def __repr__(self): return str ...

  8. Python Day2 Learning record

    一.python初始化模块                                                        Python的强大之处在于他有非常丰富和强大的标准库和第三方库 ...

  9. RedLock.Net - 基于Redis分布式锁的开源实现

    工作中,经常会遇到分布式环境中资源访问冲突问题,比如商城的库存数量处理,或者某个事件的原子性操作,都需要确保某个时间段内只有一个线程在访问或处理资源. 因此现在网上也有很多的分布式锁的解决方案,有数据 ...

  10. Shiro的认识

    #2019.2.2 Apache Shiro是基于java的一个安全框架.他帮助我们完成:认证.授权.加密.会话管理.web集成.缓存等问题. 在了Shiro之前,先要了解一下什么是权限管理? 权限管 ...