使用 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这三种方式,其中各有各的优缺点,在这也 ...
随机推荐
- 谷歌、火狐浏览器下实现JS跨域iframe高度自适应的完美解决方法,跨域调用JS不再是难题!
谷歌.火狐浏览器下实现JS跨域iframe高度自适应的解决方法 导读:今天开发的时候遇到个iframe自适应高度的问题,相信大家对这个不陌生,但是一般我们都是在同一个项目使用iframe嵌套页面,这个 ...
- 从头开始学JavaScript (六)——语句
原文:从头开始学JavaScript (六)--语句 一.条件分支语句:if 基本格式: if (<表达式1>){ <语句组1>}else if (<表达式2> ...
- HDFS副本放置策略和机架感知
副本放置策略 的副本放置策略的基本思想是: 第一block在复制和client哪里node于(假设client它不是群集的范围内,则这第一个node是随机选取的.当然系统会尝试不选择哪些太满或者太忙的 ...
- 【百度地图API】如何批量转换为百度经纬度
原文:[百度地图API]如何批量转换为百度经纬度 摘要: 百度地图API的官网上提供了常用坐标转换的示例.但是,一次只能转换一个,真的非常麻烦!!这里结合了官方的示例,自制一个批量转换工具,供大家参考 ...
- Windows 10技术布局,谈微软王者归来
Windows 10技术布局,谈微软王者归来 每个时代都有王者,王者的成功,往往是因为恰逢其时地发布了一个成功的产品(具有里程碑意义,划时代的产品).Windows 95的成功标示着微软是PC时代的王 ...
- MVC5控制器、路由、返回类型、选择器、过滤器
ASP.NET MVC5 学习笔记-1 控制器.路由.返回类型.选择器.过滤器 [TOC] 1. Action 1.1 新建项目 新建项目->Web->Asp.net Web应用程序, ...
- 重新想象 Windows 8.1 Store Apps (81) - 控件增强: 加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图
原文:重新想象 Windows 8.1 Store Apps (81) - 控件增强: 加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 Web ...
- 编程乐趣:C#获取日期所在周、月份第一和最后一天
原文:编程乐趣:C#获取日期所在周.月份第一和最后一天 写了个小功能,需要用到以周为时间段,于是写了个获取周第一和最后一天的方法,获取月份的第一和最后一天就比较简单了.代码如下: public cla ...
- 从实例谈OOP、工厂模式和重构
有了翅膀才能飞, 欠缺灵活的代码就象冻坏了翅膀的鸟儿.不能飞翔,就少了几许灵动的气韵.我们需要给代码带去温暖的阳光, 让僵冷的翅膀重新飞起来. 结合实例, 通过应用OOP.设计模式和重构,你会看到代码 ...
- status状态栏实现字符串走动
<script type="text/javascript" language="javascript"> var i = 0; var str=& ...