Aspose------导入Excel
代码:
public List<T> ImportExcelToList<T>()
{
HttpContext context = HttpContext.Current;
if (context.Request.Files.AllKeys.Length > )
{
var key = context.Request.Files.AllKeys[];
var file = context.Request.Files[key];
var folderName = Path.GetFileNameWithoutExtension(file.FileName);
var fileExtension = Path.GetExtension(file.FileName); Workbook book = new Workbook(file.InputStream);
Worksheet sheet = book.Worksheets[]; Cells cells = sheet.Cells;
var da = cells[, ].Value;
var dataTable = cells.ExportDataTable(, , cells.MaxDataRow + , cells.MaxColumn, true);
var datalist = GetList<T>(dataTable); //拆分单元格后需要给Component为空的单元格赋值
Type type = typeof(T);
PropertyInfo[] property = type.GetProperties();
for (var i = ; i < datalist.Count(); i++)
{
var li = datalist[i];
foreach (var pi in property)
{
if (pi.Name == "Component")
{
var value = pi.GetValue(li);
if (value == null)
{ var v = pi.GetValue(datalist[i - ]);
pi.SetValue(li, v);
}
}
}
}
return datalist;
}
return null;
} public List<T> GetList<T>(DataTable table)
{
List<T> list = new List<T>();
T t = default(T);
PropertyInfo[] propertypes = null;
string tempName = string.Empty;
foreach (DataRow row in table.Rows)
{
t = Activator.CreateInstance<T>();
propertypes = t.GetType().GetProperties();
foreach (PropertyInfo pro in propertypes)
{
tempName = pro.Name;
if (table.Columns.Contains(tempName))
{
object value = row[tempName];
if (!value.ToString().Equals(""))
{
if (pro.Name == "NewDuct" || pro.Name == "ExistingDuct" || pro.Name == "NewAerial" || pro.Name == "ExistingAerial")
{
var v = ChangePropertyType(pro.PropertyType,value);
pro.SetValue(t, v, null);
continue;
}
pro.SetValue(t, value, null);
}
}
}
list.Add(t);
}
return list.Count == ? null : list;
} private object ChangePropertyType(Type type, object value)
{
object data;
if (type.FullName.ToLower().Contains("decimal"))
{
data = ;
data = Convert.ToDecimal(value);
}
else
{
data = "";
data = Convert.ToString(value);
}
return data;
}
转成树结构
private List<ProjectItem> AddItemToTree(List<MergeItem> list)
{
var datalist = new List<ProjectItem>();
var component = "";
PropertyInfo[] property = typeof(MergeItem).GetProperties(); foreach (var li in list)
{
var item = new ProjectItem(); if (string.IsNullOrEmpty(li.SubComponent))
{
component = li.Component;
item.SubComponent = null;
item.ItemLevel = "Level1";
item.Unit = null;
}
else
{
item.SubComponent = li.Component;
item.ItemLevel = "Level2";
item.Unit = null; //建第三级
foreach (var pi in property)
{
var scenario = "";
if (pi.Name == "NewDuct")
{
scenario = "New Duct";
}
else if (pi.Name == "ExistingDuct")
{
scenario = "Existing Duct";
}
else if (pi.Name == "NewAerial")
{
scenario = "New Aerial";
}
else if (pi.Name == "ExistingAerial")
{
scenario = "Existing Aerial";
}
else {
continue;
} var value = pi.GetValue(li);
if (value != null)
{
var child = new ProjectItem();
child.Component = component;
child.SubComponent = item.SubComponent;
child.Description = li.SubComponent;
child.Unit = li.Unit;
child.Scenario = scenario;
child.UnitCost = Convert.ToDecimal(value);
child.Remark = li.Remark;
child.FillInstruct = li.FillInstruct;
child.ItemLevel = "Level3";
datalist.Add(child);
}
}
} item.Component = component;
item.Description = li.Component;
item.Scenario = null;
item.UnitCost = null;
item.Remark = null;
item.FillInstruct = null; var isExist = datalist.Any(p => p.Component == item.Component && p.SubComponent == item.SubComponent &&
p.Description == item.Description && p.ItemLevel == "Level2");
if (!isExist)
{
datalist.Add(item);
}
} return datalist;
}
Aspose------导入Excel的更多相关文章
- 利用Aspose.Cell控件导入Excel非强类型的数据
导入Excel的操作是非常常见的操作,可以使用Aspose.Cell.APOI.MyXls.OLEDB.Excel VBA等操作Excel文件,从而实现数据的导入,在导入数据的时候,如果是强类型的数据 ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
- C# Aspose.Cells方式导入Excel文件
读取Excel 类 我返回的是DataTable 类型 也可以返回DataSet类型 public class XlsFileHelper { public DataTable ImportExcel ...
- [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- 批量导入Excel存在的问题及解决方案
许多传统的做法,导入excel就是将excel上传到服务器的某个文件夹里如upload,之后再次读取,导入系统.这边就存在一些问题: 1.服务器需要安装Office,用于读取Excel文件. 2.系统 ...
- 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- C#导出和导入Excel模板功能
引用 Aspose.Cells; 基于WinForm 导入 private void btn_excel_input_Click(object sender, EventArgs e) { try ...
- 一步步实现ABAP后台导入EXCEL到数据库【3】
在一步步实现ABAP后台导入EXCEL到数据库[2]里,我们已经实现计划后台作业将数据导入数据库的功能.但是,这只是针对一个简单的自定义结构的导入程序.在实践应用中,面对不同的表.不同的导入文件,我们 ...
- 一步步实现ABAP后台导入EXCEL到数据库【1】
在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...
- IE8下导入EXCEL数据传到客户端以附件下载
IE8下导入EXCEL数据传到客户端以附件下载方式出现,而不显示数据,解决方法:以text/html格式返回. HttpResponseMessage message = new HttpRespon ...
随机推荐
- sql逻辑查询 理论知识
参考并转载http://www.cnblogs.com/bhtfg538/archive/2008/11/25/1341016.html First: (8) SELECT (9) DISTINCT ...
- android开发(38) 使用 DrawerLayou t实现左侧抽屉式导航菜单
最近流行 左侧抽屉式的导航条菜单,知乎,360,QQ都使用了这样的导航菜单,我们也了解下: Android Design 的流行趋势:Navigation Drawer 导航抽屉 参考这篇文章:htt ...
- UI设计,使用 线框图(页面示意图或页面布局图)
在进行页面框架设计的时候,尝试画个 线框图(页面示意图或页面布局图)吧.
- MVC教程九:异常过滤器
我们平常在程序里面为了捕获异常,会加上try-catch-finally代码,但是这样会使得程序代码看起来很庞大,在MVC中我们可以使用异常过滤器来捕获程序中的异常,如下图所示: 使用了异常过滤器以后 ...
- PCL学习八叉树
建立空间索引在点云数据处理中有着广泛的应用,常见的空间索引一般 是自顶而下逐级划分空间的各种空间索引结构,比较有代表性的包括BSP树,KD树,KDB树,R树,四叉树,八叉树等索引结构,而这些结构中,K ...
- m2e-wtp error: <path>/target/m2e-wtp/web-resources/META-INF/MANIFEST.MF (No such file or directory)
错误信息: D:\workspace\eclipse\xinfubao\xfb-mgr\target\m2e-wtp\web-resources\META-INF\MANIFEST.MF (系统找不到 ...
- Matlab基本用法
转至:http://blog.sina.com.cn/s/blog_8354dda801012dyn.html 目录: 一.说明 二.数据类型及基本输入输出 三.流程控制 四.循环 五.数组.数组运算 ...
- 解决java.lang.IllegalStateException: The application’s PagerAdapter changed the adapter’s content
A界面中有viewpager的动态加载,从界面A跳到界面B,再finish掉B返回A时报出此异常. java.lang.IllegalStateException: The application's ...
- MinGW32和64位交叉编译环境的安装和使用
原文出处: CompileGraphics Magick, Boost, Botan and QT with MinGW64 under Windows 7 64 http://www.kinetic ...
- fsck 工具 ——检查 与修复 Linux系统上的文件系统
可能由于昨天关电脑断电源的问题, 后来开机,直接出现如下界面: 心里想,不会吧,电脑怎么又出问题了吧(上周的时候,手贱,把装系统的硬盘分区设为了非活动分区,电脑就启动不来了,后来手动引导起来的:): ...