`
61party
  • 浏览: 1106398 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

asp.net使用组件koogra读取Excel数据批量上传导入

阅读更多

本文使用.NET开源组件koogra实现读取excel内容批量上传,在企业应用中经常会遇到批量上传数据的需求,客户要求使用excel表格录入一批数据,然后通过网页上传该excel表格,实现批量导入数据。这样的需求其实主要就是处理Excel表格,把Excel表格中的内容读取出来后,做一些必要的校验,然后上传校验成功的数据,返回失败数据的行号以及校验失败的信息。

koogra项目组件下载地址:

http://sourceforge.net/projects/koogra/

下面开始我们的封装过程,为了好用我希望的方式是四种,返回的结果都是DataTable对象。

1:传入的参数包括工作簿地址、工作表名称;

2:传入的参数包括工作簿地址、工作表的索引(0表示第一个工作表);

3:传入的参数包括内存流、工作表名称;

4:传入的参数包括内存流、工作表的索引(0表示第一个工作表)。

开始上代码,记得项目要引用Ionic.Utils.Zip.dll和Net.SourceForge.Koogra.dll


Code[http://www.oeedu.com]


using System;
using System.Collections.Generic;
using System.Text;
using System.Data;

using Net.SourceForge.Koogra.Excel;

namespace Gren.Framework.Office
{
/// <summary>
/// Excel工具类
/// </summary>
public class ExcelUtils
{
private Workbook book;

public ExcelUtils(string path)
{
this.book = new Workbook(path);
}

public ExcelUtils(System.IO.Stream stream)
{
this.book = new Workbook(stream);
}

protected DataTable SaveAsDataTable(Worksheet sheet)
{
DataTable dt
= new DataTable();

uint minRow = sheet.Rows.MinRow;
uint maxRow = sheet.Rows.MaxRow;

Row firstRow
= sheet.Rows[minRow];

uint minCol = firstRow.Cells.MinCol;
uint maxCol = firstRow.Cells.MaxCol;

for (uint i = minCol; i <= maxCol; i )
{
dt.Columns.Add(firstRow.Cells[i].FormattedValue());
}

for (uint i = minRow 1; i <= maxRow; i )
{
Row row
= sheet.Rows[i];

if (row != null)
{
DataRow dr
= dt.NewRow();

for (uint j = minCol; j <= maxCol; j )
{
Cell cell
= row.Cells[j];

if (cell != null)
{
dr[Convert.ToInt32(j)]
= cell.Value != null ? cell.Value.ToString() : string.Empty;
}
}

dt.Rows.Add(dr);
}

}

return dt;
}

public DataTable ToDataTable(int index)
{
Worksheet sheet
= this.book.Sheets[index];

if (sheet == null)
{
throw new ApplicationException(string.Format("索引[{0}]所指定的电子表格不存在!", index));
}

return this.SaveAsDataTable(sheet);
}

public DataTable ToDataTable(string sheetName)
{
Worksheet sheet
= this.book.Sheets.GetByName(sheetName);

if (sheet == null)
{
throw new ApplicationException(string.Format("名称[{0}]所指定的电子表格不存在!", sheetName));
}

return this.SaveAsDataTable(sheet);
}

#region 静态方法

/// <summary>
/// 单元格格式为日期时间,使用此方法转换为DateTime类型,若解析失败则返回‘0001-01-01’
/// </summary>
public static DateTime ParseDateTime(string cellValue)
{
DateTime date
= default(DateTime);

double value = default(double);

if (double.TryParse(cellValue, out value))
{
date
= DateTime.FromOADate(value);
}
else
{
DateTime.TryParse(cellValue,
out date);
}

return date;
}

/// <summary>
/// 转换为DataTable(文件路径 表名)
/// </summary>
public static DataTable TranslateToTable(string path, string sheetName)
{
ExcelUtils utils
= new ExcelUtils(path);
return utils.ToDataTable(sheetName);
}

/// <summary>
/// 转换为DataTable(文件路径 表索引)
/// </summary>
public static DataTable TranslateToTable(string path, int sheetIndex)
{
ExcelUtils utils
= new ExcelUtils(path);
return utils.ToDataTable(sheetIndex);
}

/// <summary>
/// 转换为DataTable(文件路径)
/// </summary>
public static DataTable TranslateToTable(string path)
{
ExcelUtils utils
= new ExcelUtils(path);
return utils.ToDataTable(0);
}

/// <summary>
/// 转换为DataTable(内存流 表名)
/// </summary>
public static DataTable TranslateToTable(System.IO.Stream stream, string sheetName)
{
ExcelUtils utils
= new ExcelUtils(stream);
return utils.ToDataTable(sheetName);
}

/// <summary>
/// 转换为DataTable(内存流 表索引)
/// </summary>
public static DataTable TranslateToTable(System.IO.Stream stream, int sheetIndex)
{
ExcelUtils utils
= new ExcelUtils(stream);
return utils.ToDataTable(sheetIndex);
}

/// <summary>
/// 转换为DataTable(内存流)
/// </summary>
public static DataTable TranslateToTable(System.IO.Stream stream)
{
ExcelUtils utils
= new ExcelUtils(stream);
return utils.ToDataTable(0);
}

#endregion
}
}

ParseDateTime这个静态方法是用来处理日期时间类型单元格的,在Excel表格里面日期时间类型读取出来的时候是一个double类型的数据,使用这个方法可以得到正确的DataTime类型的值。仔细的人可以发现这个方法其实除了把double类型的数据转换为DateTime之外,还会在转换失败的时候尝试把该单元格的内容做为字符串转换为DateTime,因为如果单元格是文本类型的话,那么用户输入的日期时间就不是一个double了。

好了,读取Excel的类就封装好了,那么在asp.net页面中如何使用呢?再看下面的代码,fileUpload1是文件上传控件。


Code[http://www.oeedu.com]


if (fileUpload1.HasFile)
{
DataTable dt
= null;

try
{
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(fileUpload1.FileBytes))
{
dt
= Gren.Framework.Office.ExcelUtils.TranslateToTable(stream, "sheet1");
}

//得到DataTable对象后,做你自己的处理
}
catch (Exception ex)
{
lblMessage.Text
= "<p><span class=\"c_red ft_bold\">处理数据文件错误:</span></p>";
lblMessage.Text
= "<div class=\"c_red\">" Server.HtmlEncode(ex.Message) "</div>";
}
}
else
{
lblMessage.Text
= "<p><span class=\"c_red ft_bold\">请选择数据文件</span></p>";
}

直接用内存流来处理上传的文件还是比较快的,大家试试吧.

分享到:
评论
1 楼 lipengfeng 2012-02-29  
不兼容2007

相关推荐

    三种ASP.NET读取Excel文件的方法浅析(含完整代码)

    ### ASP.NET读取Excel文件的方法浅析 #### 方法一:使用OleDB读取Excel文件 **概述** 本文档介绍了一种通过OleDB访问Excel文件的方式,将其作为数据源来读取其中的数据。这种方法适用于Excel文件版本为97至2003...

    【ASP.NET编程知识】Asp.Net使用Npoi导入导出Excel的方法.docx

    "ASP.NET使用Npoi导入导出Excel的方法" 在ASP.NET编程中,导入和导出Excel文件是一种非常常见的功能。Npoi是一个开源的库,能够帮助开发者轻松地实现Excel文件的导入和导出。本文将详细介绍如何使用Npoi在ASP.NET中...

    ASP.NET中上传并读取Excel文件数据

    在ASP.NET环境中,上传并读取Excel文件数据是一项常见的任务,尤其在数据处理、报表生成或数据导入导出等场景中。以下将详细介绍这个过程涉及的关键知识点。 首先,我们需要了解如何在ASP.NET中实现文件上传。ASP...

    用ASP.NET读取读取EXCEL中的数据到WEB页面

    在ASP.NET中,读取Excel数据并将其展示在Web页面上是常见的需求,尤其是在数据分析、报表展示或数据导入等场景中。本项目提供了一种实现方法,包括完整的项目代码和说明,帮助开发者快速理解并应用到自己的项目中。 ...

    ASP.NET中读取excel内容,并显示在界面上

    总的来说,ASP.NET中读取Excel内容并显示的过程涉及文件上传、Excel数据处理和前端展示等多个步骤。理解这些步骤以及如何在C#中操作Excel文件,是开发此类功能的关键。通过熟练运用这些技术,开发者可以构建出能够...

    Asp.net Excel批量导入数据到SqlServer数据库

    本文将详细介绍如何使用 Asp.net 实现从 Excel 文件批量导入数据到 SqlServer 数据库中。该操作可以大大提高数据导入效率,缩短数据处理时间。 标题解释 Asp.net Excel批量导入数据到SqlServer数据库,这个标题...

    asp.net读取串口数据

    在ASP.NET中实现“读取串口数据”是一个相对复杂但实用的技术点,通常用于实现远程设备监控或者数据采集系统。串口通信(Serial Port Communication)是计算机与外部设备间的一种低速通信方式,常用于连接串行设备如...

    asp.net中上传并读取excel文件数据示例.doc

    asp.net中上传并读取excel文件数据示例.doc

    ASP.NET实现EXCEL数据导入进度条ajax

    本文将深入探讨如何使用ASP.NET结合Ajax技术实现Excel数据导入时的进度条显示。 首先,我们需要理解ASP.NET的页面生命周期和Ajax的工作原理。ASP.NET是一个服务器端的Web应用程序框架,它负责处理用户的请求、执行...

    ASP.NET Excel批量导入

    ASP.NET Excel批量导入是一项常见的数据处理任务,尤其在企业级应用中,经常需要将大量结构化数据从Excel表格快速导入到数据库中。本教程将详细讲解如何利用ASP.NET技术实现这一功能。 首先,我们需要理解ASP.NET的...

    使用asp.net读取并显示excel数据

    在ASP.NET中,读取和显示Excel数据是一个常见的任务,特别是在需要从电子表格导入数据到Web应用程序时。本文将详细讲解如何使用ASP.NET实现这一功能,以读取Excel文件(支持.xsl或.xlsx格式)并将其内容显示在网页上...

    .Net Mvc之NPOI Excel数据导出和批量导入功能实现

    在我们的实践开发中我们经常会遇到很多关于报表问题的数据展示,当然了有报表肯定是少不了数据的导出和导入的一些功能的啦,我这个demo就是专门使用nopi第三方库对excel的数据批量导入和数据导出的相关功能实现。

    Excel读取和大数据批量导入数据库ASPNET源码

    本程序比较简单,就实现了excel的读取、存入数据库,其实写入数据库用的SqlBulkCopy大数据批量导入 二、菜单功能 页面就实现了两个功能 1、不需要使用数据,直接读取excel并显示出来; 2、读取excel并写入数据库...

    asp.net导入导出excel表,导入到sql数据库

    本篇将详细阐述如何使用ASP.NET结合DataTable和DataGrid实现Excel数据的导出,以及如何将Excel数据高效地导入到SQL数据库。 首先,我们来看导出Excel的过程。在ASP.NET中,有两种主要的导出方法:使用DataTable和...

    EXCEL讀取(ASP.NET)

    在本文中,我们将深入探讨如何在ASP.NET环境中利用OLEDB技术来读取Excel文件,无论是XLS格式还是XLSX格式,并将数据加载到DataTable对象中。这是一项基础但非常实用的技术,对于需要处理大量Excel数据的Web应用程序...

    asp.net页面实现Excel数据导入SqlServer

    总的来说,实现"asp.net页面实现Excel数据导入SqlServer"涉及到多个步骤:文件上传、Excel数据读取、数据转换、数据库操作。在这个过程中,我们可以使用ASP.NET的内置控件、.NET的Excel组件、SQLDMO库以及第三方工具...

    C# asp.net导入和导出excel完整源码

    在C# ASP.NET开发中,导入和导出Excel文件是一项常见的需求,这通常涉及到与数据库交互,以便将数据从数据库导出到Excel表格或者从Excel表格导入到数据库中。本项目提供了一个完整的实例代码,可以帮助开发者快速...

    asp.net 导出数据与图片到excel

    在标题“asp.net 导出数据与图片到excel”和描述中提到的,是关于如何在ASP.NET环境下将数据和图片导出到Excel文件的一个主题。这是一个常见的需求,尤其是在数据分析、报表生成或数据共享时。以下是一些相关的知识...

    通用ASP.NET Core NPOI导出复杂Word、Excel和Excel数据导入实战项目

    4. **Excel数据导入**:项目可能需要从用户上传的Excel文件中读取数据并将其存储到数据库。这需要解析Excel文件,读取数据,进行必要的验证,然后将数据保存到合适的数据库表中。NPOI提供`HSSFWorkbook`和`...

Global site tag (gtag.js) - Google Analytics