热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

asp.net使用NPOI读取excel文件

asp.net使用npoi读取excel文件内容npoi下载地址:npoipublicclassexcelhelper{读取excel文件数据到dataset,一

asp.net 使用npoi读取excel文件内容

npoi下载地址:npoi

public class excelhelper
{
///


/// 读取excel文件数据到dataset,一个sheet对应一个datatable
///

///

excel文件的物理路径
///
public static dataset getdatafromexcel(string strexcelphysicalpath, out string strerror)
{
try
{
dataset dsresult = new dataset();
strerror = "";
iworkbook wbook = null;
using (filestream fs = new filestream(strexcelphysicalpath, filemode.open, fileaccess.read))
{
if (strexcelphysicalpath.indexof(".xlsx") > 0)
{
wbook = new xssfworkbook(fs);
}
else
{
wbook = new hssfworkbook(fs);
}
}
for (int i = 0; i {
isheet wsheet = wbook.getsheetat(i);
if (wsheet == null) continue;
datatable dtsheet = getdatafromsheet(wsheet, out strerror);
if (dtsheet != null)
{
dtsheet.tablename = wsheet.sheetname.trim();
dsresult.tables.add(dtsheet);
}
else
{
dsresult = null;
break;
}
}
return dsresult;
}
catch (exception ex)
{
strerror = ex.message.tostring();
return null;
}
}
private static datatable getdatafromsheet(isheet wsheet, out string strerror)
{
try
{
datatable dtresult = new datatable();
strerror = "";
//取sheet最大列数
int max_column = 0;
for (int i = wsheet.firstrownum; i <= wsheet.lastrownum; i++)
{
irow rsheet = wsheet.getrow(i);
if (rsheet != null && rsheet.lastcellnum > max_column)
{
max_column = rsheet.lastcellnum;
}
}
//给datatable添加列
for (int i = 0; i {
dtresult.columns.add("a" + i.tostring());
}
for (int i = wsheet.firstrownum; i <= wsheet.lastrownum; i++)
{
datarow drow = dtresult.newrow();
irow rsheet = wsheet.getrow(i);
if (rsheet == null) continue;
for (int j = rsheet.firstcellnum; j {
icell csheet = rsheet.getcell(j);
if (csheet == null) continue;
switch (csheet.celltype)
{
case celltype.blank:
drow[j] = "";
break;
case celltype.boolean:
drow[j] = csheet.booleancellvalue;
break;
case celltype.error:
drow[j] = csheet.errorcellvalue;
break;
case celltype.formula:
try
{
drow[j] = csheet.numericcellvalue;
short format1 = csheet.cellstyle.dataformat;
if (format1 == 177 || format1 == 178 || format1 == 188)
{
drow[j] = csheet.numericcellvalue.tostring("#0.00");
}
}
catch
{
drow[j] = csheet.stringcellvalue.trim();
}
break;
case celltype.numeric:
try
{
short format2 = csheet.cellstyle.dataformat;
if (format2 == 14 || format2 == 31 || format2 == 57 || format2 == 58)
{
drow[j] = csheet.datecellvalue;
}
else
{
drow[j] = csheet.numericcellvalue;
}
if (format2 == 177 || format2 == 178 || format2 == 188)
{
drow[j] = csheet.numericcellvalue.tostring("#0.00");
}
}
catch
{
drow[j] = csheet.stringcellvalue.trim();
}
break;
case celltype.string:
drow[j] = csheet.stringcellvalue.trim();
break;
default:
drow[j] = csheet.stringcellvalue.trim();
break;
}
}
dtresult.rows.add(drow);
}
return dtresult;
}
catch (exception ex)
{
strerror = ex.message.tostring();
return null;
}
}
}

 



推荐阅读
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 如何在Android应用中设计和实现专业的启动欢迎界面(Splash Screen)
    在Android应用开发中,设计与实现一个专业的启动欢迎界面(Splash Screen)至关重要。尽管Android设计指南对使用Splash Screen的态度存在争议,但一个精心设计的启动界面不仅能提升用户体验,还能增强品牌识别度。本文将探讨如何在遵循最佳实践的同时,通过技术手段实现既美观又高效的启动欢迎界面,包括加载动画、过渡效果以及性能优化等方面。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 深入解析Spring框架中的双亲委派机制突破方法
    在探讨Spring框架中突破双亲委派机制的方法之前,首先需要了解类加载器的基本概念。类加载器负责将类的全限定名转换为对应的二进制字节流。每个类在被特定的类加载器加载后,其唯一性得到保证。然而,这种机制在某些场景下可能会限制灵活性,因此Spring框架提供了一些策略来突破这一限制,以实现更加动态和灵活的类加载。这些策略不仅能够提升系统的可扩展性,还能在复杂的运行环境中确保类的正确加载和管理。 ... [详细]
  • Spring Batch 异常处理与任务限制优化策略 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • 状态模式在软件设计中的应用与实现
    本文以酒店管理系统为例,探讨了状态模式在软件设计中的应用与实现。酒店房间的状态包括空闲、已预订和已入住,这些状态之间可以相互转换。通过引入状态模式,系统能够更加灵活地管理和响应不同状态下的操作,提高了代码的可维护性和扩展性。此外,状态模式还简化了状态转换的逻辑处理,使得系统的整体架构更为清晰和高效。 ... [详细]
  • 利用C#技术实现Word文档的动态生成与编辑
    本文通过一个简单的示例,介绍了如何使用C#语言实现Word文档的动态生成与编辑功能。文章详细阐述了在项目中引用Word动态库的方法,并通过具体代码示例展示了如何创建和操作Word表格。此内容旨在为初学者提供参考和学习资料,欢迎读者提出宝贵意见和建议。 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • Java 8 引入了 Stream API,这一新特性极大地增强了集合数据的处理能力。通过 Stream API,开发者可以更加高效、简洁地进行集合数据的遍历、过滤和转换操作。本文将详细解析 Stream API 的核心概念和常见用法,帮助读者更好地理解和应用这一强大的工具。 ... [详细]
author-avatar
手机用户2602926865
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有