当前位置: 首页 > 编程语言 > C#

如何在asp.net读取excel文件Share

时间:2023-04-10 23:00:08 C#

如何在asp.net读取excel文件我使用的代码非常适用于具有标准格式的excel文件。即,如果第一行是一列,则所有其余数据都对应于该列。但现在我每天定期获取,excel文件具有不同的结构,我无法读取excel文件,因为我想要的是在第三行我只有区域和位置ID及其值。然后第7行是列,8到15是它的值。最后一行17是第18到20列。如何将所有这些数据加载到单独的数据表中我正在使用的代码如下所示我创建了一个扩展方法publicstaticDataSetExceltotable(thisstringpath){DataSetds=null;使用(varpck=newOfficeOpenXml.ExcelPackage()){尝试{使用(varstream=File.Open(path,FileMode.Open,FileAccess.Read,FileShare.ReadWrite)){pck.Load(stream);}ds=新数据集();varwss=pck.Workbook.Worksheets;/////////////////////////////////////应用程序app=newApplication();//app.Visible=true;//app.Workbooks.Add("");//app.Workbooks.Add(@"c:MyWorkWorkBook1.xls");//app.Workbooks.Add(@"c:MyWorkWorkBook2.xls");//for(inti=2;i<=app.Workbooks.Count;i++)//{//for(intj=1;j<=app.Workbooks[i].Worksheets.Count;j++)//{//工作表ws=app.Workbooks[i].Worksheets[j];//ws.Copy(app.Workbooks[1].Worksheets[1]);//}//}/////////////////////////////////////////////////for(ints=0;s<5;s++)//{foreach(varwsinwss){System.Data.DataTabletbl=newSystem.Data.DataTable();布尔有标题=真;//相应地调整它(我已经提到这是一种简单的方法)stringErrorMessage=string.Empty;foreach(varfirstRowCellinws.Cells[1,1,1,ws.Dimension.End.Column]){tbl.Columns.Add(hasHeader?firstRowCell.Text:string.Format("Column{0}",firstRowCell.Start.Column));}varstartRow=hasHeader?2:1;对于(varrowNum=startRow;rowNum<=ws.Dimension.End.Row;rowNum++){varwsRow=ws.Cells[rowNum,1,rowNum,ws.Dimension.End.Column];varrow=tbl.NewRow();foreach(varcellinwsRow){//由faras修改if(cell.Text!=null){row[cell.Start.Column-1]=cell.Text;}}tbl.Rows.Add(行);tbl.TableName=ws.Name;}DataTabledt=RemoveEmptyRows(tbl);ds.Tables.Add(dt);}}catch(Exceptionexp){}返回ds;无论如何,在以编程方式使用Excel时,使用命名范围来缓解此问题是一个好主意,因为它有助于修改电子表格本身,而不仅仅是在用户使用它时。您可能知道如何命名范围,但为了完整起见,这里介绍如何命名范围。当您在代码中使用电子表格时,您可以使用[yourworkbook].Names["yourNamedRange"]来获取对范围的引用。如果它只是一个单元格并且您需要引用行或列索引,则可以使用.Start.Row或.Start.Column。我为任何内容添加命名范围-包含特定值的单元格、列、标题行、数据集开始的行。如果我需要行或列索引,我会分配有用的变量名。这可以保护您免受电子表格中各种“幻数”的影响。您(或您的用户)可以在不破坏任何东西的情况下四处走动。如果他们过多地修改结构,那么它将无法工作。您还可以对工作簿和工作表使用保护,以确保它们不会意外修改结构-选项卡、行、列。这是我上周末在学习时进行的测试中的一个松散测验。这只是一个“helloworld”,所以我并不想让它变得精简和完美。(我正在编写电子表格,而不是阅读它们,所以我只是在了解这些属性。)//使用(varpackage=newExcelPackage(newFileInfo("PriceQuoteTemplate.xlsx")))打开工作簿{//获取我正在寻找的工作表varquoteSheet=package.Workbook.Worksheets["Quote"];//如果我想从一个命名范围中获取文本varcellText=quoteSheet.Workbook.Names["myNamedRange"].Text//如果我想获取单元格的值作为其他类型varcellValue=quoteSheet.Workbook.Names["myNamedRange"].GetValue();//如果我有一个命名范围并且我想遍历行并从某些列中获取//值varmyRange=quoteSheet.Workbook.Names["rangeContainingRows"];//这是一个用于标记列的命名范围。因此,我不会使用//magicnumber,而是从具有此命名范围的任何列中读取。varsomeColumn=quoteSheet.Workbook.Names["columnLabel"].Start.Column;for(varrowNumber=myRange.Start.Row;rowNumber可能有一种更优雅的方法。我刚开始使用它。但我的想法是告诉它在电子表格中找到某个命名范围,然后使用该行该范围内的数字或列号,而不是神奇的行号或列号。尽管范围可能是一个单元格、一行或一列,但它可能是一个更大的区域。这就是我使用.Start.Row的原因。换句话说,给我一个范围内第一个单元格的行。如果一个范围有多行,.Rows属性指示行数,所以我知道有多少行。这意味着有人甚至可以在不破坏代码的情况下插入行。以上就是C#学习教程:如何读取asp.net中excel文件共享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: