本文使用.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>";
}
直接用内存流来处理上传的文件还是比较快的,大家试试吧.
分享到:
相关推荐
### ASP.NET读取Excel文件的方法浅析 #### 方法一:使用OleDB读取Excel文件 **概述** 本文档介绍了一种通过OleDB访问Excel文件的方式,将其作为数据源来读取其中的数据。这种方法适用于Excel文件版本为97至2003...
"ASP.NET使用Npoi导入导出Excel的方法" 在ASP.NET编程中,导入和导出Excel文件是一种非常常见的功能。Npoi是一个开源的库,能够帮助开发者轻松地实现Excel文件的导入和导出。本文将详细介绍如何使用Npoi在ASP.NET中...
在ASP.NET环境中,上传并读取Excel文件数据是一项常见的任务,尤其在数据处理、报表生成或数据导入导出等场景中。以下将详细介绍这个过程涉及的关键知识点。 首先,我们需要了解如何在ASP.NET中实现文件上传。ASP...
在ASP.NET中,读取Excel数据并将其展示在Web页面上是常见的需求,尤其是在数据分析、报表展示或数据导入等场景中。本项目提供了一种实现方法,包括完整的项目代码和说明,帮助开发者快速理解并应用到自己的项目中。 ...
总的来说,ASP.NET中读取Excel内容并显示的过程涉及文件上传、Excel数据处理和前端展示等多个步骤。理解这些步骤以及如何在C#中操作Excel文件,是开发此类功能的关键。通过熟练运用这些技术,开发者可以构建出能够...
本文将详细介绍如何使用 Asp.net 实现从 Excel 文件批量导入数据到 SqlServer 数据库中。该操作可以大大提高数据导入效率,缩短数据处理时间。 标题解释 Asp.net Excel批量导入数据到SqlServer数据库,这个标题...
在ASP.NET中实现“读取串口数据”是一个相对复杂但实用的技术点,通常用于实现远程设备监控或者数据采集系统。串口通信(Serial Port Communication)是计算机与外部设备间的一种低速通信方式,常用于连接串行设备如...
asp.net中上传并读取excel文件数据示例.doc
本文将深入探讨如何使用ASP.NET结合Ajax技术实现Excel数据导入时的进度条显示。 首先,我们需要理解ASP.NET的页面生命周期和Ajax的工作原理。ASP.NET是一个服务器端的Web应用程序框架,它负责处理用户的请求、执行...
ASP.NET Excel批量导入是一项常见的数据处理任务,尤其在企业级应用中,经常需要将大量结构化数据从Excel表格快速导入到数据库中。本教程将详细讲解如何利用ASP.NET技术实现这一功能。 首先,我们需要理解ASP.NET的...
在ASP.NET中,读取和显示Excel数据是一个常见的任务,特别是在需要从电子表格导入数据到Web应用程序时。本文将详细讲解如何使用ASP.NET实现这一功能,以读取Excel文件(支持.xsl或.xlsx格式)并将其内容显示在网页上...
在我们的实践开发中我们经常会遇到很多关于报表问题的数据展示,当然了有报表肯定是少不了数据的导出和导入的一些功能的啦,我这个demo就是专门使用nopi第三方库对excel的数据批量导入和数据导出的相关功能实现。
本程序比较简单,就实现了excel的读取、存入数据库,其实写入数据库用的SqlBulkCopy大数据批量导入 二、菜单功能 页面就实现了两个功能 1、不需要使用数据,直接读取excel并显示出来; 2、读取excel并写入数据库...
本篇将详细阐述如何使用ASP.NET结合DataTable和DataGrid实现Excel数据的导出,以及如何将Excel数据高效地导入到SQL数据库。 首先,我们来看导出Excel的过程。在ASP.NET中,有两种主要的导出方法:使用DataTable和...
在本文中,我们将深入探讨如何在ASP.NET环境中利用OLEDB技术来读取Excel文件,无论是XLS格式还是XLSX格式,并将数据加载到DataTable对象中。这是一项基础但非常实用的技术,对于需要处理大量Excel数据的Web应用程序...
总的来说,实现"asp.net页面实现Excel数据导入SqlServer"涉及到多个步骤:文件上传、Excel数据读取、数据转换、数据库操作。在这个过程中,我们可以使用ASP.NET的内置控件、.NET的Excel组件、SQLDMO库以及第三方工具...
在C# ASP.NET开发中,导入和导出Excel文件是一项常见的需求,这通常涉及到与数据库交互,以便将数据从数据库导出到Excel表格或者从Excel表格导入到数据库中。本项目提供了一个完整的实例代码,可以帮助开发者快速...
在标题“asp.net 导出数据与图片到excel”和描述中提到的,是关于如何在ASP.NET环境下将数据和图片导出到Excel文件的一个主题。这是一个常见的需求,尤其是在数据分析、报表生成或数据共享时。以下是一些相关的知识...
4. **Excel数据导入**:项目可能需要从用户上传的Excel文件中读取数据并将其存储到数据库。这需要解析Excel文件,读取数据,进行必要的验证,然后将数据保存到合适的数据库表中。NPOI提供`HSSFWorkbook`和`...