使用 Aspose.Cells 实现 excel导入
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using System.Diagnostics;
using Aspose.Cells;
public partial class P_BrieFing_BrieFingExcelExport_MSLL : System.Web.UI.Page
{
protected string PID = string.Empty;//工程主键
protected string XM_ID = string.Empty;//监测项目编号
protected void Page_Load(object sender, EventArgs e)
{
GetUrlRequest();
GetInfo();
}
#region 获得URL中的参数
protected void GetUrlRequest()
{
PID = Request.QueryString["PID"];
XM_ID = Request.QueryString["XM_ID"];
}
#endregion #region 得到监测的工程基本数据数据
protected void GetInfo()
{
P_PROJECT bll = new P_PROJECT();
P_PROJECTInfo ProjectModel = bll.GetModelById(PID);
string Test_Orgcode = MyCommon.GetEnterpriseCodeByID(ProjectModel.E_ENTERPRISEID);//获取当前工程 监测机构用户编号
string PROJECT_NUM = ProjectModel.CODE;//项目编号
string ProName = ProjectModel.NAME;//项目名称
string ProAddress = ProjectModel.ADDRESS;//项目地址 List<DBParameter> paras = new List<DBParameter>();
paras.Add(new OracleDBParameter("p_Projectid", PID));
paras.Add(new OracleDBParameter("XM_ID", XM_ID));
P_ITEM ITemBll = new P_ITEM();
var ITEMModel = ITemBll.GetModel(paras, ""); E_DEVICE DeviceBll = new E_DEVICE();
E_DEVICEInfo entity = DeviceBll.GetModel(ITEMModel.E_DEVICEID);
string XMJCYQ = "";
if (entity != null)
{
XMJCYQ = entity.NAME;//项目监测仪器
}
SetExcelData(ProName, ProAddress, XMJCYQ, PROJECT_NUM);
} #endregion #region 往Excel写入数据
protected void SetExcelData(string ProName, string Address, string JCYQ, string PROJECT_NUM)
{ Workbook SourceBook1 = new Workbook();
string TempatPath = Server.MapPath("~/ExcelTemplate/锚索拉力模板.xls"); XM_YL_F bllYL = new XM_YL_F();
DataTable dtFromDB = bllYL.GetDataTableByProjectNum(PROJECT_NUM);//从数据库中读取数据
//for (int j = 0; j < dtFromDB.Rows.Count;j++)
//{
// string result = Convert.ToString(dtFromDB.Rows[j]["result"]);
// string[] arrs = result.Split(',');//获得一条数据
//}
int JCAmount = ;
if (dtFromDB.Rows.Count > )
{
JCAmount = Convert.ToString(dtFromDB.Rows[]["result"]).Split(',').Length + ;//获得监测次数 数据result是从第二次获得的 因此+1
}
List<string> fileList = new List<string>(); double TableAmount = Math.Ceiling(Convert.ToDouble(JCAmount) / );//获得多少个Excel int JCDAmount = dtFromDB.Rows.Count;//有几个监测点 就有几行
#region 如果存在数据
if (TableAmount > )
{
for (int k = ; k < TableAmount; k++)//循环生成Excel
{ Workbook tempBook = new Workbook(); //创建设计模板对象,并绑定数据源
WorkbookDesigner designer = new WorkbookDesigner(); #region 给第X次赋值
designer.Open(TempatPath);
int jc1 = k * + ;
if (k == )
{
designer.SetDataSource("CS1", "第1次");
}
else
{
designer.SetDataSource("FCS", "上次累计(m)");
designer.SetDataSource("CS1", "第" + (jc1) + "次");
} int jc2 = k * + ;//如果是第二页 jc2=5
int jc2N = jc2 + ;
designer.SetDataSource("CS2", "第" + jc2N + "次"); int jc3 = k * + ;
int jc3N = jc3 + ;
designer.SetDataSource("CS3", "第" + jc3N + "次"); int jc4 = k * + ;
int jc4N = jc4 + ;
designer.SetDataSource("CS4", "第" + jc4N + "次"); int jc5 = k * + ;
int jc5N = jc5 + ;
designer.SetDataSource("CS5", "第" + jc5N + "次"); #endregion DataTable datatable = new DataTable();
datatable = CreateTable("CD,CS,Num1,Num2,Num3,Num4,Num5,Num6,,Num7,Num8,Num9,Num10,Num11,Num12,Num13,Num14,Num15", "JK"); #region 循环取出数据
for (int i = ; i < JCDAmount; i++)
{
DataRow row = datatable.NewRow(); string result = Convert.ToString(dtFromDB.Rows[i]["result"]); row["CD"] = Convert.ToString(dtFromDB.Rows[i]["SY_Num"]);//测点
if (k != )//如果不是第一页 则需要去上一页中的累计值
{
int LastLJ = k * - ;//第6条数据 应该是第5条数据 而第一天数据是空的 因此-2
row["CS"] = result.Split(',')[LastLJ].Split('@')[];
}
else
{
row["CS"] = Convert.ToString(dtFromDB.Rows[i]["F0"]);//初始数据
} if (k == )
{
row["Num1"] = "";
row["Num2"] = "";
row["Num3"] = "";//第一次数据 水平位移为0 }
else
{
if (jc1 <= JCAmount - )
{//如果是1111.0则用"/"替换
row["Num1"] = result.Split(',')[jc1].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc1].Split('@')[];
row["Num2"] = result.Split(',')[jc1].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc1].Split('@')[];
row["Num3"] = result.Split(',')[jc1].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc1].Split('@')[];
}
else
{
row["Num1"] = "/";
row["Num2"] = "/";
row["Num3"] = "/";
}
} if (jc2 <= JCAmount - )//如果有6条数据 第二页第二条数据5 是不存在的
{
row["Num4"] = result.Split(',')[jc2].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc2].Split('@')[]; //如果数据是1111.0 则替换为/
row["Num5"] = result.Split(',')[jc2].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc2].Split('@')[];
row["Num6"] = result.Split(',')[jc2].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc2].Split('@')[];
}
else
{
row["Num4"] = "/";
row["Num5"] = "/";
row["Num6"] = "/";
} if (jc3 <= JCAmount - )
{
row["Num7"] = result.Split(',')[jc3].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc3].Split('@')[];
row["Num8"] = result.Split(',')[jc3].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc3].Split('@')[];
row["Num9"] = result.Split(',')[jc3].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc3].Split('@')[];
}
else
{
row["Num7"] = "/";
row["Num8"] = "/";
row["Num9"] = "/";
} if (jc4 <= JCAmount - )
{
row["Num10"] = result.Split(',')[jc4].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc4].Split('@')[];
row["Num11"] = result.Split(',')[jc4].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc4].Split('@')[];
row["Num12"] = result.Split(',')[jc4].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc4].Split('@')[];
}
else
{
row["Num10"] = "/";
row["Num11"] = "/";
row["Num12"] = "/";
} if (jc4 <= JCAmount - )
{
row["Num13"] = result.Split(',')[jc5].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc5].Split('@')[];
row["Num14"] = result.Split(',')[jc5].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc5].Split('@')[];
row["Num15"] = result.Split(',')[jc5].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc5].Split('@')[];
}
else
{
row["Num13"] = "/"; ;
row["Num14"] = "/"; ;
row["Num15"] = "/";
} datatable.Rows.Add(row);
}
#endregion designer.SetDataSource("Title", "表7-" + Convert.ToInt32(k + ) + " 基坑锚索拉力监测结果表");
designer.SetDataSource("ProName", ProName);
designer.SetDataSource("Paddress", Address);
designer.SetDataSource("PYQ", JCYQ);
designer.SetDataSource("PGF", "《广州市地区建筑基坑支护技术规定》(GJB 02-98)"); designer.SetDataSource(datatable);
designer.Process(); //修改Sheet的名称
designer.Workbook.Worksheets[].Name = "test" + k.ToString(); #region 合并根据数据源和自定义模板,生成相应的报表Excel文件
string tt = string.Format("Combind{0}.xls", k + DateTime.Now.ToString("yyyyMMddhhmmss"));
string fileToSave = Server.MapPath(tt);
designer.Save(fileToSave);
fileList.Add(fileToSave); //第一次要打开
if (k == )
{
SourceBook1.Open(fileToSave);
}
else
{
//第二个使用Combind函数操作
tempBook.Open(fileToSave);
SourceBook1.Combine(tempBook);
}
#endregion
} string FileName = "基坑锚索拉力监测结果表" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
string soucePath = @"D:\JKJC\" + FileName;
SourceBook1.Save(soucePath); //删除临时文件
foreach (string file in fileList)
{
if (File.Exists(file))
{
File.Delete(file);
}
}
//Process.Start(soucePath);
DownloadHelper.DownloadFile(soucePath, FileName);
}
#endregion
else
{
#region 如果没有数据
WorkbookDesigner designer = new WorkbookDesigner();
designer.Open(TempatPath); designer.SetDataSource("Title", "表7-1基坑支撑轴力监测结果表");
designer.SetDataSource("ProName", ProName);
designer.SetDataSource("Paddress", Address);
designer.SetDataSource("PYQ", JCYQ);
designer.SetDataSource("PGF", "《广州市地区建筑基坑支护技术规定》(GJB 02-98)"); DataTable datatable = this.CreateTable("CD,CS,Num1,Num2,Num3,Num4,Num5,Num6,,Num7,Num8,Num9,Num10,Num11,Num12,Num13,Num14,Num15", "JK");
designer.SetDataSource("CS1", "第1次");
designer.SetDataSource("CS2", "第2次");
designer.SetDataSource("CS3", "第3次");
designer.SetDataSource("CS4", "第4次");
designer.SetDataSource("CS5", "第4次");
DataRow row = datatable.NewRow(); row["CD"] = "/";
row["CS"] = "/";
row["Num1"] = "/";
row["Num2"] = "/";
row["Num3"] = "/";
row["Num4"] = "/";
row["Num5"] = "/";
row["Num6"] = "/";
row["Num7"] = "/";
row["Num8"] = "/";
row["Num9"] = "/";
row["Num10"] = "/";
row["Num11"] = "/";
row["Num12"] = "/";
row["Num13"] = "/";
row["Num14"] = "/";
row["Num15"] = "/";
datatable.Rows.Add(row); designer.SetDataSource(datatable);
designer.Process(); string FileName = "基坑锚索拉力监测结果表" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
string path = @"D:\JKJC\" + FileName;
if (File.Exists(path))
{
File.Delete(path);
}
designer.Save(path, FileFormatType.Default);
//Process.Start(path);
#endregion
DownloadHelper.DownloadFile(path, FileName); }
}
#endregion #region 创建Table
public DataTable CreateTable(string nameString, string tableName)
{
string[] strArray = nameString.Split(new char[] { ',', ';' });
List<string> nameList = new List<string>();
foreach (string str in strArray)
{
if (!string.IsNullOrEmpty(str))
{
nameList.Add(str);
}
}
return this.CreateTable(nameList, tableName);
} public DataTable CreateTable(List<string> nameList, string tableName)
{
if (nameList.Count <= )
{
return null;
}
DataTable table = new DataTable(tableName);
foreach (string str in nameList)
{
DataColumn column = new DataColumn
{
DataType = Type.GetType("System.String"),
ColumnName = str
};
table.Columns.Add(column);
}
return table;
}
#endregion
}

使用 Aspose.Cells 实现 excel导入的更多相关文章
- 报表中的Excel操作之Aspose.Cells(Excel模板)
原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...
- Aspose.Cells导出Excel(1)
利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...
- 使用Aspose.Cells读取Excel
最新更新请访问: http://denghejun.github.io Aspose.Cells读取Excel非常方便,以下是一个简单的实现读取和导出Excel的操作类: 以下是Aspose.Ce ...
- 怎么使用Aspose.Cells读取excel 转化为Datatable
说明:vs2012 asp.net mvc4 c# 使用Aspose.Cells 读取Excel 转化为Datatable 1.HTML前端代码 <%@ Page Language=" ...
- 怎么利用Aspose.Cells 获取excel 数据表中sheet的名称
说明:开发环境 vs2012 asp.net mvc4 c# 利用Aspose.Cells 获取Excel数据表的sheet的名称,并把获取的名称赋值给easyUI 的combobox 1.运行效果 ...
- Aspose.cells 读取Excel表中的图片问题
一.说明 本文主要是讲解,怎么使用aspose.cells读取Excel表中的图片,并把图片转换成流或是image对象. 二.开发环境说明 开发工具vs2012,c#语言, 三.Aspose.cell ...
- C# WinForm使用Aspose.Cells.dll 导出导入Excel/Doc 完整实例教程
1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 Aspose C# 导出Excel 实例”一文中的 ...
- Aspose.Cells.dll引用导入导出Excel
Aspose.Cells 导入导出EXCEL 文章出处:http://hi.baidu.com/leilongbing/item/c11467e1819e5417595dd8c1 修改样式 ...
- 基于 Aspose.Cells与XML导入excel 数据----操作类封装
前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...
随机推荐
- linux_shell_轮询触发启动脚本
while [ 1 ]do length=`redis-cli -h *.*.*.* -p 8000 llen eq` while [ $length -gt 1 ] do echo "le ...
- MongoDB详解学习历程
MongoDB是一个基于分布式文件存储的数据库,它是介于关系数据库和非关系数据库之间的产品. MongoDB支持的数据结构非常松散,类似json的bjson格式,因此可以存储比较复杂的数据类型.Mon ...
- IOS新手教程(二)-控制流
int main(){ //2.控制流 //2.1 if语句 //1. if(expression){ } //2. if(expression){ }else{ } //3.能够有0个或是多个els ...
- 从[java.lang.OutOfMemoryError: Java heap space]恢复
出现java.lang.OutOfMemoryError: Java heap space该错误或者是程序问题,或者被分配到JVM内存真的是不够的. 一般来说都是能够事前可控解决的. 可是假设不可控的 ...
- 【百度地图API】多家地图API内存消耗对比测验(带源码)
原文:[百度地图API]多家地图API内存消耗对比测验(带源码) 任务描述: 啊,美妙的春节结束了.酸奶小妹和妈妈的山西平遥之旅也宣告成功!距离平遥古城7km,有一个同样身为“世界文化遗产”的寺庙,叫 ...
- MySQL编程(0) - Mysql中文乱码问题解决方案
MySQL 5.6 for Windows 解压缩版配置安装: http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html MySQL ...
- Content-Type boundary 问题
我并不知道问题怎么描述清楚一些. 事情是这样的,使用 Microsoft Dynamics CRM Server 2016 做CRM系统的时候用到 使用 Web API 执行批处理操作(参见SDK或 ...
- IOS开发中绘制地图线路
地图应用经常会涉及到线路的绘制问题,ios下可以使用MKMapView进行地图开发,使用 MKOverlayView进行线路的绘制. 使用MKMapView添加MKMap.framework 和Cor ...
- C# .NET ASP.NET 其中关系你了解多少
有些人一直在做这方面..但突然有人来问你这些问题..估计有很多答不上来. 1..NET是一个平台,一个抽象的平台的概念. .NET平台其本身实现的方式其实还是库,抽象层面上来看是一个平台. 个人理解. ...
- linux学习书籍
linux学习书籍推荐 网上看到的,做个标记.没研究过,仅供参考 linux编程学习 inux 学习书目推荐 Linux基础 1.<Linux与Unix Shell 编程指南> C语 ...