本文通过上传一个excle文件,并规定具体格式,读取数据填充到gridview中
前台页面代码如下:
<div style=" width:500px; height:400px; text-align:center"> <form id="form1" runat="server" enctype="multipart/form-data"> <asp:Label runat="server">我们只支持excel(.xls/.xlsx)的上传,模板点击这里下载</asp:Label> <asp:Button ID="LoadTemplate" runat="server" Text="下载模板" OnClick="LoadTemplate_Click"/> <div id="MyFile" style=" float:left; margin-top:20px; margin-bottom:20px"> <input name="File" type="file" class="FileUpStyle" id="File1" /> <asp:Button runat="server" Text="上传" ID="Upload" BorderColor="Desktop" BorderWidth="1px" Height="20px" Width="60px" OnClick="Upload_Click"></asp:Button> </div> <asp:GridView ID="GridView1" BorderColor="Black" runat="server" AutoGenerateColumns="False" Font-Size="12px" Width="530px" AllowSorting="True"> <Columns> <asp:BoundField DataField="holiday" HeaderText="holiday" /> </Columns> <HeaderStyle BackColor="Azure" Font-Size="12px" HorizontalAlign="Center" /> <RowStyle HorizontalAlign="Center" /> <PagerStyle HorizontalAlign="Center" /> </asp:GridView> </form> </div>
方法一是使用office提供的类库来获取:
static string filePath = string.Empty; /// <summary> /// 删除文件 /// </summary> /// <param name="path"></param> private void DeleteFile(DirectoryInfo path) { foreach (DirectoryInfo d in path.GetDirectories()) { DeleteFile(d); } foreach (FileInfo f in path.GetFiles()) { f.Delete(); } } /// <summary> /// 上传文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Upload_Click(object sender, EventArgs e) { HttpFileCollection files = System.Web.HttpContext.Current.Request.Files; for (int i = 0; i < files.Count; i++) { string ShortFileName = files[i].FileName.Substring(files[i].FileName.LastIndexOf("\\") + 1); string type = ShortFileName.Substring(files[i].FileName.LastIndexOf(".") + 1); if (ShortFileName == "") { Response.Write("<script>alert('未选择文件!');</script>"); } else if (!type.ToLower().Equals("xls") && !type.ToLower().Equals("xlsx")) { Response.Write("<script>alert('文件格式不正确!必须是(.xls/.xlsx)');</script>"); } else if (ShortFileName != "" && (type.ToLower().Equals("xls") || type.ToLower().Equals("xlsx"))) { filePath = Server.MapPath("~/bin/Files/ExcelFiles/" + ShortFileName); DeleteFile(new DirectoryInfo(Server.MapPath("~/bin/Files/ExcelFiles/"))); files[i].SaveAs(filePath); DataSet ds = ReadExcel(filePath,type); if (ds == null) { Response.Write("<script>alert('文件格式不正确!');</script>"); return; } bool folat = ISQualified(ds); if (folat) { Response.Write("<script>alert('日期格式不正确!应该为yyyy-MM-dd');</script>"); } else { Save(ds); } } } } /// <summary> /// 保存到数据库 /// </summary> /// <param name="ds"></param> private void Save(DataSet ds) { GridView1.DataSource = ds; GridView1.DataBind(); } /// <summary> /// 读取excel /// </summary> /// <param name="path"></param> /// <returns></returns> private DataSet ReadExcel(string path,string type) { DataSet ds; try { ReadExcel readExcel = new ReadExcel(); string sheetName = readExcel.ExcelSheetName(filePath,type)[0].ToString(); ds = readExcel.ExcelDataSource(filePath,type,sheetName); } catch (Exception e) { return null; } return ds; } /// <summary> /// 判断时间格式 /// </summary> /// <param name="ds"></param> /// <returns></returns> private bool ISQualified(DataSet ds) { bool folat = false; if (ds == null || ds.Tables[0].Rows.Count < 1) return true; foreach (DataRow d in ds.Tables[0].Rows) { try { string holidayyear = d["holiday"].ToString().Trim(); if (string.IsNullOrEmpty(holidayyear)) continue; DateTime b = DateTime.ParseExact(holidayyear, "yyyy-MM-dd 0:00:00", CultureInfo.InvariantCulture); folat = false; } catch (Exception e) { folat = true; return folat; } } return folat; } /// <summary> /// 文件模板下载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void LoadTemplate_Click(object sender, EventArgs e) { Response.ContentType = "application/ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=Template.xls"); string filename = Server.MapPath("~/bin/Files/Template/Template.xls"); Response.TransmitFile(filename); }
方法二是引用npoi类库进行读取,相比上一个方法,这个更灵活,可操作性更高:
static string filePath = string.Empty; /// <summary> /// 删除文件 /// </summary> /// <param name="path"></param> private void DeleteFile(DirectoryInfo path) { foreach (DirectoryInfo d in path.GetDirectories()) { DeleteFile(d); } foreach (FileInfo f in path.GetFiles()) { f.Delete(); } } /// <summary> /// 文件模板下载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void LoadTemplate_Click(object sender, EventArgs e) { Response.ContentType = "application/ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=Template.xls"); string filename = Server.MapPath("~/bin/Files/Template/Template.xls"); Response.TransmitFile(filename); } /// <summary> /// 上传文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Upload_Click(object sender, EventArgs e) { HttpFileCollection files = System.Web.HttpContext.Current.Request.Files; for (int i = 0; i < files.Count; i++) { string ShortFileName = files[i].FileName.Substring(files[i].FileName.LastIndexOf("\\") + 1); string type = ShortFileName.Substring(files[i].FileName.LastIndexOf(".") + 1); if (ShortFileName == "") { Response.Write("<script>alert('未选择文件!');</script>"); } else if (!type.ToLower().Equals("xls") && !type.ToLower().Equals("xlsx")) { Response.Write("<script>alert('文件格式不正确!必须是(.xls/.xlsx)');</script>"); } else if (ShortFileName != "" && (type.ToLower().Equals("xls") || type.ToLower().Equals("xlsx"))) { filePath = Server.MapPath("~/bin/Files/ExcelFiles/" + ShortFileName); DeleteFile(new DirectoryInfo(Server.MapPath("~/bin/Files/ExcelFiles/"))); files[i].SaveAs(filePath); DataTable dt = GetExcelInfo(filePath); if (dt == null) { Response.Write("<script>alert('文件格式不正确!');</script>"); return; } bool folat = ISQualified(dt); if (folat) { Response.Write("<script>alert('日期格式不正确!应该为yyyy-MM-dd');</script>"); } else { Save(dt); } } } } private DataTable GetExcelInfo(string path) { using (FileStream stream = new FileStream(@path, FileMode.OpenOrCreate, FileAccess.ReadWrite)) { HSSFWorkbook workbook = new HSSFWorkbook(stream); //获取excel的第一个sheet HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(0); DataTable table = new DataTable(); //获取sheet的首行 HSSFRow headerRow = (HSSFRow)sheet.GetRow(0); //一行最后一个方格的编号 即总的列数 int cellCount = headerRow.LastCellNum; for (int i = headerRow.FirstCellNum; i < cellCount; i++) { DataColumn column = new DataColumn(headerRow.GetCell(i).StringCellValue); table.Columns.Add(column); } //最后一列的标号 即总的行数 int rowCount = sheet.LastRowNum; for (int i = (sheet.FirstRowNum + 1); i < sheet.LastRowNum; i++) { HSSFRow row = (HSSFRow)sheet.GetRow(i); DataRow dataRow = table.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++) { HSSFCell hsc = (HSSFCell)row.GetCell(j); if (hsc != null && !string.IsNullOrEmpty(hsc.ToString())) { try { string date = row.GetCell(j).DateCellValue.ToString(); dataRow[j] = date; } catch (Exception e) { dataRow[j] = null; } } } table.Rows.Add(dataRow); } workbook = null; sheet = null; return table; } } private bool ISQualified(DataTable dt) { bool folat = false; if (dt == null || dt.Rows.Count < 1) return true; foreach (DataRow d in dt.Rows) { try { string holidayyear = d["holiday"].ToString().Trim(); if (string.IsNullOrEmpty(holidayyear)) continue; DateTime b = DateTime.ParseExact(holidayyear, "yyyy-MM-dd 0:00:00", CultureInfo.InvariantCulture); folat = false; } catch (Exception e) { folat = true; return folat; } } return folat; } /// <summary> /// 保存到数据库 /// </summary> /// <param name="ds"></param> private void Save(DataTable dt) { GridView1.DataSource = dt; GridView1.DataBind(); }
相关推荐
在ASP.NET中,读取Excel数据并将其展示在Web页面上是常见的需求,尤其是在数据分析、报表展示或数据导入等场景中。本项目提供了一种实现方法,包括完整的项目代码和说明,帮助开发者快速理解并应用到自己的项目中。 ...
在C# ASP.NET项目中,操作Excel通常有两种主流方法:一是使用Microsoft Office Interop组件,二是借助第三方库如EPPlus或NPOI。给定的代码片段采用的是第一种方式,即利用Microsoft.Office.Interop.Excel命名空间中...
在ASP.NET中,有两种主要的导出方法:使用DataTable和DataGrid。这两种方法都能将网页上的数据转换成Excel文件。 1. **使用DataTable导出**:DataTable是.NET框架中的一个强大工具,它可以存储和操作数据。要将其...
在ASP.NET中,读取Excel文件是一项常见的任务,特别是在数据导入、报表生成或者数据分析的场景下。本篇文章将深入探讨如何在ASP.NET中实现Excel文件的简易读取,主要涉及的技术点包括C#编程语言、文件操作以及Excel...
在Asp.net中处理Excel文件,通常有两种主要方法:使用 OleDB 或 ODBC 连接,以及使用第三方库如 NPOI 或 EPPlus。 1. **使用OleDb或ODBC连接** 这种方法依赖于Microsoft Jet Engine(对于Excel 97-2003)或ACE.OLE...
本篇将详细介绍如何在ASP.NET中利用这两种控件来实现Excel表格的打印功能。 首先,我们需要了解如何将Gridview或DataList的数据导出到Excel。这通常涉及到创建一个CSV格式的响应,因为Excel可以方便地打开和解析...
本文将深入探讨如何利用ASP.NET框架更轻松地操作Excel文件,这对于需要频繁处理大量数据并将其以表格形式呈现的场景尤其有用。 ### ASP.NET操作Excel的核心知识点 #### 1. 动态链接库(DLL)的使用 为了在ASP.NET...
可以使用类似的库,如EPPlus,读取Excel文件,然后将数据加载到DataTable,再进行数据库操作。 9. **安全性考虑**:处理用户上传的Excel文件时,需要防范可能的恶意代码注入,如宏病毒。应限制接受的文件格式和大小...
导出Excel在ASP.NET中主要通过两种方式实现: - **使用Microsoft.Office.Interop.Excel**:这是最直接的方法,通过引用Office Interop库,可以直接操作Excel对象,创建工作表,填充数据,然后保存为Excel文件。但...
这两种格式在内部存储结构上有所不同,但ASP.NET和C#提供了多种库来处理它们。 首先,我们来了解一下Excel文件的基本概念。Excel 2003使用的.xls格式基于二进制文件结构,而2007及更高版本的.xlsx格式则采用了基于...
综上所述,基于ASP.NET和C#的`ExcelHelper`类库为开发者提供了一种便捷的方式来处理Excel与DataTable之间的数据交换,无论是导出还是导入,都能有效地提升工作效率,满足业务需求。通过理解和运用这些知识点,你可以...
本文将详细讲解如何实现这个过程,包括支持.xlsx和.xls这两种不同的Excel文件格式。 首先,我们需要理解ASP.NET的核心概念。ASP.NET是由微软开发的一个用于构建Web应用程序的框架,它提供了丰富的功能来创建动态、...
在“告别ASP.NET操作EXCEL的烦恼(总结篇).doc”和“ASP.NET与Excel的交互.pdf”这两个文档中,可能会详细讲解如何使用这两种方法,并给出具体的代码示例,包括如何创建工作簿、添加工作表、读写单元格数据,以及...
这两种方法都通过ODBC数据源连接到Excel文件,然后使用ADO.NET的数据访问组件来读取数据。 2. **创建数据库连接**:在ASP.NET中,使用SqlConnection类建立与SQL Server的连接。需要提供正确的连接字符串,包括...
1. **文件格式理解**:Excel文件主要有两种格式,`.xls`(Excel 97-2003)和`.xlsx`(Excel 2007及更高版本),它们基于不同的文件结构。`.xlsx`文件采用Open XML标准,而`.xls`则是二进制格式。 2. **API选择**: ...
- ReadTable:此方法用于读取Excel文件中的表,并返回一个DataTable对象。 连接字符串的构建逻辑依赖于传入的文件路径,分别根据文件扩展名(.xls或.xlsx)来选择正确的OLEDB提供者和扩展属性。.xls文件使用...
在ASP.NET中,导出和操作Excel表格是常见的需求,特别是在数据分析、报表生成以及数据交换等场景中。本文将深入探讨如何使用ASP.NET技术来实现这些功能。 首先,我们需要了解导出Excel的基本原理。在ASP.NET中,...
首先,我们来看ASP.NET中导出Excel的方法。在ASP.NET中,有两种主要的导出策略: 1. **将文件存储在服务器并提供下载链接**: 这种方法涉及到先将数据写入一个Excel文件,存储在服务器的某个目录下,然后通过HTTP...