1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.IO;
  8. using System.Data;
  9. using System.Diagnostics;
  10. using Aspose.Cells;
  11. public partial class P_BrieFing_BrieFingExcelExport_MSLL : System.Web.UI.Page
  12. {
  13. protected string PID = string.Empty;//工程主键
  14. protected string XM_ID = string.Empty;//监测项目编号
  15. protected void Page_Load(object sender, EventArgs e)
  16. {
  17. GetUrlRequest();
  18. GetInfo();
  19. }
  20. #region 获得URL中的参数
  21. protected void GetUrlRequest()
  22. {
  23. PID = Request.QueryString["PID"];
  24. XM_ID = Request.QueryString["XM_ID"];
  25. }
  26. #endregion
  27.  
  28. #region 得到监测的工程基本数据数据
  29. protected void GetInfo()
  30. {
  31. P_PROJECT bll = new P_PROJECT();
  32. P_PROJECTInfo ProjectModel = bll.GetModelById(PID);
  33. string Test_Orgcode = MyCommon.GetEnterpriseCodeByID(ProjectModel.E_ENTERPRISEID);//获取当前工程 监测机构用户编号
  34. string PROJECT_NUM = ProjectModel.CODE;//项目编号
  35. string ProName = ProjectModel.NAME;//项目名称
  36. string ProAddress = ProjectModel.ADDRESS;//项目地址
  37.  
  38. List<DBParameter> paras = new List<DBParameter>();
  39. paras.Add(new OracleDBParameter("p_Projectid", PID));
  40. paras.Add(new OracleDBParameter("XM_ID", XM_ID));
  41. P_ITEM ITemBll = new P_ITEM();
  42. var ITEMModel = ITemBll.GetModel(paras, "");
  43.  
  44. E_DEVICE DeviceBll = new E_DEVICE();
  45. E_DEVICEInfo entity = DeviceBll.GetModel(ITEMModel.E_DEVICEID);
  46. string XMJCYQ = "";
  47. if (entity != null)
  48. {
  49. XMJCYQ = entity.NAME;//项目监测仪器
  50. }
  51. SetExcelData(ProName, ProAddress, XMJCYQ, PROJECT_NUM);
  52. }
  53.  
  54. #endregion
  55.  
  56. #region 往Excel写入数据
  57. protected void SetExcelData(string ProName, string Address, string JCYQ, string PROJECT_NUM)
  58. {
  59.  
  60. Workbook SourceBook1 = new Workbook();
  61. string TempatPath = Server.MapPath("~/ExcelTemplate/锚索拉力模板.xls");
  62.  
  63. XM_YL_F bllYL = new XM_YL_F();
  64. DataTable dtFromDB = bllYL.GetDataTableByProjectNum(PROJECT_NUM);//从数据库中读取数据
  65. //for (int j = 0; j < dtFromDB.Rows.Count;j++)
  66. //{
  67. // string result = Convert.ToString(dtFromDB.Rows[j]["result"]);
  68. // string[] arrs = result.Split(',');//获得一条数据
  69. //}
  70. int JCAmount = ;
  71. if (dtFromDB.Rows.Count > )
  72. {
  73. JCAmount = Convert.ToString(dtFromDB.Rows[]["result"]).Split(',').Length + ;//获得监测次数 数据result是从第二次获得的 因此+1
  74. }
  75. List<string> fileList = new List<string>();
  76.  
  77. double TableAmount = Math.Ceiling(Convert.ToDouble(JCAmount) / );//获得多少个Excel
  78.  
  79. int JCDAmount = dtFromDB.Rows.Count;//有几个监测点 就有几行
  80. #region 如果存在数据
  81. if (TableAmount > )
  82. {
  83. for (int k = ; k < TableAmount; k++)//循环生成Excel
  84. {
  85.  
  86. Workbook tempBook = new Workbook();
  87.  
  88. //创建设计模板对象,并绑定数据源
  89. WorkbookDesigner designer = new WorkbookDesigner();
  90.  
  91. #region 给第X次赋值
  92. designer.Open(TempatPath);
  93. int jc1 = k * + ;
  94. if (k == )
  95. {
  96. designer.SetDataSource("CS1", "第1次");
  97. }
  98. else
  99. {
  100. designer.SetDataSource("FCS", "上次累计(m)");
  101. designer.SetDataSource("CS1", "第" + (jc1) + "次");
  102. }
  103.  
  104. int jc2 = k * + ;//如果是第二页 jc2=5
  105. int jc2N = jc2 + ;
  106. designer.SetDataSource("CS2", "第" + jc2N + "次");
  107.  
  108. int jc3 = k * + ;
  109. int jc3N = jc3 + ;
  110. designer.SetDataSource("CS3", "第" + jc3N + "次");
  111.  
  112. int jc4 = k * + ;
  113. int jc4N = jc4 + ;
  114. designer.SetDataSource("CS4", "第" + jc4N + "次");
  115.  
  116. int jc5 = k * + ;
  117. int jc5N = jc5 + ;
  118. designer.SetDataSource("CS5", "第" + jc5N + "次");
  119.  
  120. #endregion
  121.  
  122. DataTable datatable = new DataTable();
  123. datatable = CreateTable("CD,CS,Num1,Num2,Num3,Num4,Num5,Num6,,Num7,Num8,Num9,Num10,Num11,Num12,Num13,Num14,Num15", "JK");
  124.  
  125. #region 循环取出数据
  126. for (int i = ; i < JCDAmount; i++)
  127. {
  128. DataRow row = datatable.NewRow();
  129.  
  130. string result = Convert.ToString(dtFromDB.Rows[i]["result"]);
  131.  
  132. row["CD"] = Convert.ToString(dtFromDB.Rows[i]["SY_Num"]);//测点
  133. if (k != )//如果不是第一页 则需要去上一页中的累计值
  134. {
  135. int LastLJ = k * - ;//第6条数据 应该是第5条数据 而第一天数据是空的 因此-2
  136. row["CS"] = result.Split(',')[LastLJ].Split('@')[];
  137. }
  138. else
  139. {
  140. row["CS"] = Convert.ToString(dtFromDB.Rows[i]["F0"]);//初始数据
  141. }
  142.  
  143. if (k == )
  144. {
  145. row["Num1"] = "";
  146. row["Num2"] = "";
  147. row["Num3"] = "";//第一次数据 水平位移为0
  148.  
  149. }
  150. else
  151. {
  152. if (jc1 <= JCAmount - )
  153. {//如果是1111.0则用"/"替换
  154. row["Num1"] = result.Split(',')[jc1].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc1].Split('@')[];
  155. row["Num2"] = result.Split(',')[jc1].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc1].Split('@')[];
  156. row["Num3"] = result.Split(',')[jc1].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc1].Split('@')[];
  157. }
  158. else
  159. {
  160. row["Num1"] = "/";
  161. row["Num2"] = "/";
  162. row["Num3"] = "/";
  163. }
  164. }
  165.  
  166. if (jc2 <= JCAmount - )//如果有6条数据 第二页第二条数据5 是不存在的
  167. {
  168. row["Num4"] = result.Split(',')[jc2].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc2].Split('@')[]; //如果数据是1111.0 则替换为/
  169. row["Num5"] = result.Split(',')[jc2].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc2].Split('@')[];
  170. row["Num6"] = result.Split(',')[jc2].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc2].Split('@')[];
  171. }
  172. else
  173. {
  174. row["Num4"] = "/";
  175. row["Num5"] = "/";
  176. row["Num6"] = "/";
  177. }
  178.  
  179. if (jc3 <= JCAmount - )
  180. {
  181. row["Num7"] = result.Split(',')[jc3].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc3].Split('@')[];
  182. row["Num8"] = result.Split(',')[jc3].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc3].Split('@')[];
  183. row["Num9"] = result.Split(',')[jc3].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc3].Split('@')[];
  184. }
  185. else
  186. {
  187. row["Num7"] = "/";
  188. row["Num8"] = "/";
  189. row["Num9"] = "/";
  190. }
  191.  
  192. if (jc4 <= JCAmount - )
  193. {
  194. row["Num10"] = result.Split(',')[jc4].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc4].Split('@')[];
  195. row["Num11"] = result.Split(',')[jc4].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc4].Split('@')[];
  196. row["Num12"] = result.Split(',')[jc4].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc4].Split('@')[];
  197. }
  198. else
  199. {
  200. row["Num10"] = "/";
  201. row["Num11"] = "/";
  202. row["Num12"] = "/";
  203. }
  204.  
  205. if (jc4 <= JCAmount - )
  206. {
  207. row["Num13"] = result.Split(',')[jc5].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc5].Split('@')[];
  208. row["Num14"] = result.Split(',')[jc5].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc5].Split('@')[];
  209. row["Num15"] = result.Split(',')[jc5].Split('@')[] == "1111.0" ? "/" : result.Split(',')[jc5].Split('@')[];
  210. }
  211. else
  212. {
  213. row["Num13"] = "/"; ;
  214. row["Num14"] = "/"; ;
  215. row["Num15"] = "/";
  216. }
  217.  
  218. datatable.Rows.Add(row);
  219. }
  220. #endregion
  221.  
  222. designer.SetDataSource("Title", "表7-" + Convert.ToInt32(k + ) + " 基坑锚索拉力监测结果表");
  223. designer.SetDataSource("ProName", ProName);
  224. designer.SetDataSource("Paddress", Address);
  225. designer.SetDataSource("PYQ", JCYQ);
  226. designer.SetDataSource("PGF", "《广州市地区建筑基坑支护技术规定》(GJB 02-98)");
  227.  
  228. designer.SetDataSource(datatable);
  229. designer.Process();
  230.  
  231. //修改Sheet的名称
  232. designer.Workbook.Worksheets[].Name = "test" + k.ToString();
  233.  
  234. #region 合并根据数据源和自定义模板,生成相应的报表Excel文件
  235. string tt = string.Format("Combind{0}.xls", k + DateTime.Now.ToString("yyyyMMddhhmmss"));
  236. string fileToSave = Server.MapPath(tt);
  237. designer.Save(fileToSave);
  238. fileList.Add(fileToSave);
  239.  
  240. //第一次要打开
  241. if (k == )
  242. {
  243. SourceBook1.Open(fileToSave);
  244. }
  245. else
  246. {
  247. //第二个使用Combind函数操作
  248. tempBook.Open(fileToSave);
  249. SourceBook1.Combine(tempBook);
  250. }
  251. #endregion
  252. }
  253.  
  254. string FileName = "基坑锚索拉力监测结果表" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
  255. string soucePath = @"D:\JKJC\" + FileName;
  256. SourceBook1.Save(soucePath);
  257.  
  258. //删除临时文件
  259. foreach (string file in fileList)
  260. {
  261. if (File.Exists(file))
  262. {
  263. File.Delete(file);
  264. }
  265. }
  266. //Process.Start(soucePath);
  267. DownloadHelper.DownloadFile(soucePath, FileName);
  268. }
  269. #endregion
  270. else
  271. {
  272. #region 如果没有数据
  273. WorkbookDesigner designer = new WorkbookDesigner();
  274. designer.Open(TempatPath);
  275.  
  276. designer.SetDataSource("Title", "7-1基坑支撑轴力监测结果表");
  277. designer.SetDataSource("ProName", ProName);
  278. designer.SetDataSource("Paddress", Address);
  279. designer.SetDataSource("PYQ", JCYQ);
  280. designer.SetDataSource("PGF", "《广州市地区建筑基坑支护技术规定》(GJB 02-98)");
  281.  
  282. DataTable datatable = this.CreateTable("CD,CS,Num1,Num2,Num3,Num4,Num5,Num6,,Num7,Num8,Num9,Num10,Num11,Num12,Num13,Num14,Num15", "JK");
  283. designer.SetDataSource("CS1", "1");
  284. designer.SetDataSource("CS2", "2");
  285. designer.SetDataSource("CS3", "3");
  286. designer.SetDataSource("CS4", "4");
  287. designer.SetDataSource("CS5", "4");
  288. DataRow row = datatable.NewRow();
  289.  
  290. row["CD"] = "/";
  291. row["CS"] = "/";
  292. row["Num1"] = "/";
  293. row["Num2"] = "/";
  294. row["Num3"] = "/";
  295. row["Num4"] = "/";
  296. row["Num5"] = "/";
  297. row["Num6"] = "/";
  298. row["Num7"] = "/";
  299. row["Num8"] = "/";
  300. row["Num9"] = "/";
  301. row["Num10"] = "/";
  302. row["Num11"] = "/";
  303. row["Num12"] = "/";
  304. row["Num13"] = "/";
  305. row["Num14"] = "/";
  306. row["Num15"] = "/";
  307. datatable.Rows.Add(row);
  308.  
  309. designer.SetDataSource(datatable);
  310. designer.Process();
  311.  
  312. string FileName = "基坑锚索拉力监测结果表" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";
  313. string path = @"D:\JKJC\" + FileName;
  314. if (File.Exists(path))
  315. {
  316. File.Delete(path);
  317. }
  318. designer.Save(path, FileFormatType.Default);
  319. //Process.Start(path);
  320. #endregion
  321. DownloadHelper.DownloadFile(path, FileName);
  322.  
  323. }
  324. }
  325. #endregion
  326.  
  327. #region 创建Table
  328. public DataTable CreateTable(string nameString, string tableName)
  329. {
  330. string[] strArray = nameString.Split(new char[] { ',', ';' });
  331. List<string> nameList = new List<string>();
  332. foreach (string str in strArray)
  333. {
  334. if (!string.IsNullOrEmpty(str))
  335. {
  336. nameList.Add(str);
  337. }
  338. }
  339. return this.CreateTable(nameList, tableName);
  340. }
  341.  
  342. public DataTable CreateTable(List<string> nameList, string tableName)
  343. {
  344. if (nameList.Count <= )
  345. {
  346. return null;
  347. }
  348. DataTable table = new DataTable(tableName);
  349. foreach (string str in nameList)
  350. {
  351. DataColumn column = new DataColumn
  352. {
  353. DataType = Type.GetType("System.String"),
  354. ColumnName = str
  355. };
  356. table.Columns.Add(column);
  357. }
  358. return table;
  359. }
  360. #endregion
  361. }

使用 Aspose.Cells 实现 excel导入的更多相关文章

  1. 报表中的Excel操作之Aspose.Cells(Excel模板)

    原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...

  2. Aspose.Cells导出Excel(1)

    利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...

  3. 使用Aspose.Cells读取Excel

      最新更新请访问: http://denghejun.github.io Aspose.Cells读取Excel非常方便,以下是一个简单的实现读取和导出Excel的操作类: 以下是Aspose.Ce ...

  4. 怎么使用Aspose.Cells读取excel 转化为Datatable

    说明:vs2012 asp.net mvc4 c# 使用Aspose.Cells 读取Excel 转化为Datatable 1.HTML前端代码 <%@ Page Language=" ...

  5. 怎么利用Aspose.Cells 获取excel 数据表中sheet的名称

    说明:开发环境 vs2012 asp.net mvc4 c# 利用Aspose.Cells 获取Excel数据表的sheet的名称,并把获取的名称赋值给easyUI 的combobox 1.运行效果 ...

  6. Aspose.cells 读取Excel表中的图片问题

    一.说明 本文主要是讲解,怎么使用aspose.cells读取Excel表中的图片,并把图片转换成流或是image对象. 二.开发环境说明 开发工具vs2012,c#语言, 三.Aspose.cell ...

  7. C# WinForm使用Aspose.Cells.dll 导出导入Excel/Doc 完整实例教程

    1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 Aspose C# 导出Excel 实例”一文中的 ...

  8. Aspose.Cells.dll引用导入导出Excel

    Aspose.Cells 导入导出EXCEL 文章出处:http://hi.baidu.com/leilongbing/item/c11467e1819e5417595dd8c1 修改样式       ...

  9. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

随机推荐

  1. Leetcode:unique_binary_search_trees

    一.     称号 给定的数目n.问:有多少种不同BST(二叉搜索树) 比如: 因为N =3,共同拥有5种独特的BST. 1          3      3       2      1 \   ...

  2. ios结构体httpPost头结构

    ios结构体httpPost头结构 by 吴雪莹 NSString* urlStr = @"; NSURL* url = [NSURL URLWithString:urlStr]; NSMu ...

  3. LeetCode:same_tree题解

    一.     题目: 给定两个二叉树,编写一个函数来检查它们是否相等或为空树.假设两个二叉树被觉得是相等的,那么它们在结构上是同样的,而且随意节点具有同样的值. 二.     分析 非常easy的题目 ...

  4. javascript中类的属性研究

    原文:javascript中类的属性研究 本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很 ...

  5. Winform中node.Text重命名时窗口无响应假死的解决方法

    用户控件中有一个树,窗体使用了这个控件,但是重命名时执行node.text="XXXX" 执行了很长时间,大约9s,在此期间winform界面假死,尝试过多线程异步委托的方式来操作 ...

  6. 深入理解C指针之五:指针和字符串

    原文:深入理解C指针之五:指针和字符串 基础概念 字符串可以分配到内存的不同区域,通常使用指针来支持字符串操作.字符串是以ASCII字符NUL结尾的字符序列.ASCII字符NUL表示为\0.字符串通常 ...

  7. MVC创建XML,并实现增删改

    原文:MVC创建XML,并实现增删改 如果创建如下的XML: <?xml version="1.0" encoding="utf-8" standalon ...

  8. 一步一步写算法(之prim算法 上)

    原文:一步一步写算法(之prim算法 上) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面我们讨论了图的创建.添加.删除和保存等问题.今 ...

  9. Yii2中如何使用CodeCeption

    Yii2和CodeCeption CodeCeption是一个全栈的PHP测试框架,关于CodeCeption的介绍见:CodeCeption官方文档. Yii2官方增加了对CodeCeption的支 ...

  10. YUV格式转换RGB(基于opencv)

    在编写代码将需要处理YUV格从每个视频帧中提取,然后将其保存为图片.有两种常见的方法在线,第一种是通过opencv自带cvCvtColor,可是这样的方法有bug.得到的图片会泛白.另外一种方法是公式 ...