Aspose.Cells操作 导出实例(模板导出)
aspose.cells根据模板导出excel
aspose.cells根据模板导出excel ⼜隔⼗多天没写博客了,最近都在忙项⽬的事情,公司⼈事变动也⽐较⼤,⼿头上就⼜多了⼀个项⽬。
最近做⽤aspose.cells根据模板导出excel报价单的功能,顺便把相关的核⼼记下来,先上模板和导出的效果图吧,如下: 导出效果图(看到产品图,打不死的程(diao)序(si)员(猿)骚动吧,有没有不禁看了看⾃⼰粗⼤的右⼿): (其中红⾊框框起来的是动态填充的内容,⼯作薄名(产品信息)也是动态输出的) 模板如下: ⼤概流程是这样,先把需要输出到excel的内容存到⼀个model⾥⾯,然后把该model编程⼀个datatable,然后就直接绑定在指定的excel模板上,然后把excel转成流根据excel格式输出到客户端。
以下为将置顶的model绑定在指定的模板上(模板后⾯附上)///<summary>///返回Excel⽂件流///</summary>///<param name="model">数据</param>///<param name="templateFileName">模板⽂件,要全路径</param>///<param name="sheetName">⼯作簿名称</param>///<param name="outDesigner">⼯作簿名称</param>///<returns></returns>public static MemoryStream OutModelFileToStream(DataTable model, string templateFileName, string sheetName, Action<WorkbookDesigner, DataTable> action) {WorkbookDesigner designer = new WorkbookDesigner();designer.Open(templateFileName);designer.SetDataSource(model);//对designer做额外操作if (action != null){action(designer, model);}//SetCellWithPicture(designer, model.Rows[0]["ProductLogo"].ToString(), 3, 5, 17, 8);designer.Process();if (!string.IsNullOrEmpty(sheetName)){designer.Workbook.Worksheets[0].Name = sheetName;}return designer.Workbook.SaveToStream();} 最后⼀个参数action是为了让⽤户可以在将基本的数据绑定在excel表上之后,可以做⼀些额外的补充操作,⽐如说控制某些特殊部分的格式或者说是某个位置要输出图⽚等,我做的时候,就是要在excel表的某个位置动态输出⼀个图⽚才做了如此操作。
Aspose.Cells操作说明
获取或设置工作簿密码 获取或设置是否重新计算所有打开文 件的公式
Region
CountryCode --枚举类型
获取或设置工作簿区域(指当前使用 者区域) 默认为当前计算机区域
Shared
bool
获取或设置当前工作簿是否共享 默认为 false
ShowTabs
bool
获取或设置是否显示标签(工作sourceColumn destRow destColumn
值类型
int int int int
说明
源行标 源列标 目的地行标 目的地列标
返回
void
说明
1.2.6 CopyConditionalFormatting
冻结窗格 void Worksheet.FreezePanes(cellName,freezedRows,freezedColumns) or (Row,Column,freezedRows,freezedColumns); +2
自动筛选 单元格集合
获取编码名称(―Sheet1‖...)
获取或设置当前工作表显示方向;是 否从右至左 默认为 false
FirstVisibleColumn FirstVisibleRow HPageBreaks Hyperlinks Index
int int HPageBreaks Hyperlinks int
获取或设置当前工作表显示的起始行 获取或设置 工作表显示的起始列
获取当前工作表索引(标签位置); 下标从 0 开始
IsGridlinesVisible IsPageBreakPreview
bool bool
获取或设置是否显示网格 获取或设置是否显示为分页预览 默认为 false
Aspose.Cells组件导出excel文件
Aspose.Cells组件导出excel⽂件本⽂实例为⼤家分享了Aspose.Cells导出excel⽂件的⽅法,供⼤家参考,具体内容如下/// <summary>/// 导出数据到本地/// </summary>/// <param name="dt">要导出的数据</param>/// <param name="tableName">导出名称</param>/// <param name="tableTitle">表格⾏名格式“账号,密码”</param>/// <param name="response">请求</param>public static void OutFileToDisk(DataTable dt, string tableName, string tableTitle, HttpResponse response){Workbook workbook = new Workbook(); //⼯作簿Worksheet sheet = workbook.Worksheets[0]; //⼯作表Cells cells = sheet.Cells;//单元格//为标题设置样式Style styleTitle = workbook.Styles[workbook.Styles.Add()];//新增样式styleTitle.HorizontalAlignment = TextAlignmentType.Center;//⽂字居中 = "宋体";//⽂字字体styleTitle.Font.Size = 18;//⽂字⼤⼩styleTitle.Font.IsBold = true;//粗体//样式2Style style2 = workbook.Styles[workbook.Styles.Add()];//新增样式style2.HorizontalAlignment = TextAlignmentType.Center;//⽂字居中 = "宋体";//⽂字字体style2.Font.Size = 14;//⽂字⼤⼩style2.Font.IsBold = true;//粗体style2.IsTextWrapped = true;//单元格内容⾃动换⾏style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;//样式3Style style3 = workbook.Styles[workbook.Styles.Add()];//新增样式style3.HorizontalAlignment = TextAlignmentType.Center;//⽂字居中 = "宋体";//⽂字字体style3.Font.Size = 12;//⽂字⼤⼩style3.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;style3.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;style3.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;style3.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;int Colnum = dt.Columns.Count;//表格列数int Rownum = dt.Rows.Count;//表格⾏数//⽣成⾏1 标题⾏cells.Merge(0, 0, 1, Colnum);//合并单元格cells[0, 0].PutValue(tableName);//填写内容cells[0, 0].SetStyle(styleTitle);cells.SetRowHeight(0, 38);//⽣成⾏2 列名⾏string[] Tile = tableTitle.Split(',');for (int i = 0; i < Colnum; i++){cells[1, i].PutValue(Tile[i]);cells[1, i].SetStyle(style2);cells.SetRowHeight(1, 25);}//⽣成数据⾏for (int i = 0; i < Rownum; i++){for (int k = 0; k < Colnum; k++){cells[2 + i, k].PutValue(dt.Rows[i][k].ToString());cells[2 + i, k].SetStyle(style3);}cells.SetRowHeight(2 + i, 24);}workbook.Save(response, HttpUtility.UrlEncode(tableName, System.Text.Encoding.UTF8) + ".xls", ContentDisposition.Attachment, new XlsSaveOptions(SaveFormat.Excel97To2003)); }调⽤string tableTitle = "账号,密码";ExcelHelp.OutFileToDisk(dt, "账户信息", tableTitle , HttpContext.Current.Response);前台页⾯window.open("⽅法", "_blank");//点击下载Aspose.Cells.dll以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
Aspose.cell生成表格
Aspose.cell⽣成表格public void ExportQueryPrj(HttpContext context){//接受前端传递参数和数据string datasource = context.Request["queryResult"]; //序列化后的json字符串List<QueryXM> queryList = JSONStringToList<QueryXM>(datasource); //反序列化json字符串为listif (queryList.Count > 0){Workbook workbook = new Workbook();//⼯作薄Worksheet worksheet = workbook.Worksheets[0];//⼯作表Cells cells = worksheet.Cells;//单元格//表头部分cells[0, 0].PutValue("索引值");cells[0, 1].PutValue("项⽬ID");cells[0, 2].PutValue("⽤地位置");cells[0, 3].PutValue("项⽬名称");cells[0, 4].PutValue("建设单位");cells[0, 5].PutValue("⽤地性质");cells[0, 6].PutValue("⽤地⾯积");cells[0, 7].PutValue("项⽬类型");cells[0, 8].PutValue("红线类别");cells[0, 9].PutValue("⽤地分类");cells[0, 10].PutValue("BELONGTFZX");cells[0, 11].PutValue("TDCRSTATUS");cells[0, 12].PutValue("TDYT");cells[0, 13].PutValue("JSYDFL");//调整宽度cells.SetColumnWidth(2, 40);cells.SetColumnWidth(3, 60);cells.SetColumnWidth(4, 80);cells.SetColumnWidth(7, 40);cells.SetColumnWidth(8, 20);//内容for (int i = 0; i < queryList.Count; i++){cells[i+1, 0].PutValue(queryList[i].OBJECTID);cells[i + 1, 1].PutValue(queryList[i].PrjID);cells[i + 1, 2].PutValue(queryList[i].FADDRESS);cells[i + 1, 3].PutValue(queryList[i].PRJNAME);cells[i + 1, 4].PutValue(queryList[i].FCOMPANY);cells[i + 1, 5].PutValue(queryList[i].YDXZ);cells[i + 1, 6].PutValue(queryList[i].YDMJ);cells[i + 1, 7].PutValue(queryList[i].XMLX);cells[i + 1, 8].PutValue(queryList[i].TYPE);cells[i + 1, 9].PutValue(queryList[i].YDFL);cells[i + 1, 10].PutValue(queryList[i].BELONGTFZX);cells[i + 1, 11].PutValue(queryList[i].TDCRSTATUS);cells[i + 1, 12].PutValue(queryList[i].TDYT);cells[i + 1, 13].PutValue(queryList[i].JSYDFL);cells.SetRowHeight(i + 1, 25); //设置⾏⾼}string filepath= "../Aspose/QueryExcel/项⽬查询报告"+DateTime.Now.ToString("yyyymmddHHmmss")+".xls"; string fileServerPath = context.Server.MapPath(filepath);if (!File.Exists(fileServerPath)){var myfile = File.Create(fileServerPath);myfile.Close();}workbook.Save(fileServerPath);//按照json格式返回前端数据ResponseResult response = new ResponseResult() { responseMark = 1, responseObject = filepath };context.Response.Write(new JavaScriptSerializer().Serialize(response));}}。
使用Aspose.Cells实现导入导出
使⽤Aspose.Cells实现导⼊导出本⽂实例为⼤家分享了Aspose.Cells实现导⼊导出的具体代码,供⼤家参考,具体内容如下这是⾃⼰整理的导⼊导出类,⾥⾯有注释。
using System;using System.Collections.Generic;using System.Data;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;using Aspose.Cells;namespace mon.ExcelUtil{////// excel操作基类//////public class BaseExcelUtil{private Workbook m_Wb = null;////// ⽣成Excel////// 模板Excel的路径+⽂件名/// Excel⽂件的字节对象public byte[] CreateExcel(string url){FileStream fs = null;try{//读取模板Excel⽂件的中内容fs = new FileStream(url, FileMode.Open, FileAccess.Read, FileShare.Read);m_Wb = new Workbook();m_Wb.Open(fs);setValue(m_Wb);//转换为字节对象并返回return m_Wb.SaveToStream().ToArray();}catch (Exception ex){throw ex;}finally{fs.Close();}}////// 设定Excel中的数据/// 数据源为datable类型////// ⼯作簿public virtual void setValue(Workbook wb){throw new Exception("The method or operation is not implemented.");}////// 读取Excel////// Excel的路径+⽂件名/// Excel⽂件的字节对象public DataTable GetExcel(string url){FileStream fs = null;try{//读取Excel⽂件的中内容fs = new FileStream(url, FileMode.Open, FileAccess.Read, FileShare.Read);m_Wb = new Workbook();m_Wb.Open(fs);//设定Excel中的数据return getValue(m_Wb);}finally{fs.Close();}}////// 取得Excel中的数据////// ⼯作簿public virtual DataTable getValue(Workbook wb){throw new Exception("The method or operation is not implemented.");}////// 设置字符串值/////////public void putValue(Cell c, object value){try{if (value == null || object.Equals(value, DBNull.Value) || value.ToString().Trim().Length == 0) {}else{c.PutValue(value.ToString());}}catch (Exception){c.PutValue("--");}}////// 设置数值值/////////public void putValueDouble(Cell c, object value){try{if (value == null || object.Equals(value, DBNull.Value) || value.ToString().Trim().Length == 0) {}else{c.PutValue(Decimal.Parse(value.ToString()));}}catch (Exception)c.PutValue(value.ToString());}}////// 设置⽇期值/////////public void putDateValue(Cell c, object value){try{if (value == null || object.Equals(value, DBNull.Value) || value.ToString().Trim().Length == 0) {}else{c.PutValue(DateTime.Parse(value.ToString()));}}catch (Exception){c.PutValue(value.ToString());}}}}////实现基类using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Reflection;using System.Text;using System.Threading.Tasks;using Aspose.Cells;namespace mon.ExcelUtil{////// Excel帮助类///public class ExcelUtil :BaseExcelUtil{private DataTable dt;private string title;public ExcelUtil() {}////// 从第⼏⾏开始读取///public int FirstRow { get; set; }////// 从第⼏列开始读取///public int FirstColumns { get; set; }////// excel标题///public string Title{get { return title; }set { title = value; }}private string fileName;////// ⽂件名///public string FileName{get { return fileName; }set { fileName = value; }}public DataTable Dt{get { return dt; }set { dt = value; }}public bool Flag{set;get;}/////////导出设定值public override void setValue(Workbook wb){int index = 0;Worksheet ws = null;int rcount = dt.Rows.Count, columns = dt.Columns.Count; if (dt != null && dt.Rows.Count > 0){index = wb.Worksheets.AddCopy(0);ws = wb.Worksheets[index]; = FileName.Replace(".xls", "");try{putValue(ws.Cells[0, 0], this.title);int i = 1;for (int j = 0; j < columns; j++){putValue(ws.Cells[1, j], dt.Columns[j].ColumnName); }for (int j = 0; j < rcount; j++){i++;for (int h = 0; h < columns; h++){putValue(ws.Cells[i, h], dt.Rows[j][h].ToString());}}wb.Worksheets.RemoveAt(0);}catch (Exception ex){throw ex;}}}////// 导⼊excel////// 读取的⽂件名/// 从第⼏⾏开始读取/// 从第⼏列开始读取//////public override DataTable getValue(Workbook wb){Worksheet sheet = wb.Worksheets[0];Cells cells = sheet.Cells;return cells.ExportDataTableAsString(FirstRow, FirstColumns, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);}}}/////导出调⽤⽅法public ActionResult ToExcel() {List list = new List();for (int i = 0; i < 100; i++){UserInfo info = new UserInfo();info.Age = i.ToString();info.ID = i; = "姓名" + i;list.Add(info);}///将list类型转换为datatableDataTable dt= DataTableHelper.IListToDataTable(list);//实例化帮助类ExcelUtil exc = new ExcelUtil();exc.Dt = dt;exc.FileName = "导出测试.xls";exc.Title = "导出测试";//需要写⼊的模板string url = Server.MapPath("/Content/Down/template.xls");byte[] data = exc.CreateExcel(url);//浏览器下载⽂件Response.AppendHeader("Content-Disposition", "attachment; filename=" + exc.FileName);//HttpUtility.UrlEncode(r.FileName, Encoding.UTF8)); Response.ContentType = "application/ms-excel";Response.AddHeader("Content-Length", data.Length.ToString());Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");Response.BinaryWrite(data);pleteRequest();return Content("ss");}///导⼊调⽤⽅法public ActionResult ImportExcel(){string url = Server.MapPath("/Content/Down/Import.xls");ExcelUtil exc = new ExcelUtil();exc.FirstRow = 1;exc.FirstColumns = 0;DataTable dt= exc.GetExcel(url);return Content("ss");}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
C#导出和导入Excel模板功能
C#导出和导⼊Excel模板功能引⽤ Aspose.Cells;基于WinForm导⼊private void btn_excel_input_Click(object sender, EventArgs e){try{DataTable dt = new DataTable();string filePath = "";OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "Microsoft Excel files(*.xls)|*.xls"; //过滤⼀下,只要表格格式的ofd.InitialDirectory = "c:\\";ofd.RestoreDirectory = true;ofd.FilterIndex = 1;ofd.AddExtension = true;ofd.CheckFileExists = true;ofd.CheckPathExists = true;ofd.ShowHelp = true; //是否显⽰帮助按钮if (ofd.ShowDialog() == DialogResult.OK){size_editfalge = "0";thinkss_editflage = "0";door_editflage = "0";filePath = ofd.FileName;Workbook workbook = new Workbook();workbook.Open(filePath);for (int i = 0; i < workbook.Worksheets.Count; i++){//取第⼀个表Cells cells = workbook.Worksheets[i].Cells;if (cells.MaxDataRow != 0){dt = cells.ExportDataTable(1, 0, cells.MaxDataRow, 导⼊EXCEL的列数);dt =dt_handle(dt);//获取到了数据,存储到表中bool k = insert_into_db(dt);if (k){MessageBox.Show("导⼊成功,重新查询即可看到!");}else{MessageBox.Show("导⼊失败!");}}}}}catch (Exception ex){MessageBox.Show(ex.Message, "提⽰", MessageBoxButtons.OK, MessageBoxIcon.Error);}}导出private void button3_Click(object sender, EventArgs e){try{DataTable dt = (DataTable)dataGridView1.DataSource;string fileToSave = "";SaveFileDialog sfd = new SaveFileDialog();sfd.InitialDirectory = "C:\\";sfd.Filter = "Excel⽂件(*.xls)|*.xls";if (sfd.ShowDialog() == DialogResult.OK){fileToSave = sfd.FileName;}if (fileToSave == ""){return;}#region Excel设置数据源WorkbookDesigner designer = new WorkbookDesigner();string path = Application.StartupPath + "\\存储的⽂件夹\\⽂件名.xls"; //加载报表模板的存储地址designer.Open(path);dt.TableName = "A"; //EXCEL模板报表的别名designer.SetDataSource(dt);designer.Process();if (File.Exists(fileToSave)){File.Delete(fileToSave);}designer.Save(fileToSave, FileFormatType.Excel2);MessageBox.Show("报表导出成功!", "提⽰", MessageBoxButtons.OK, rmation);}catch(Exception ex){MessageBox.Show(ex.ToString());}}报表模板样式列名1 列名2 列名3&=[A].对应DataTable的列名1 &=[A].对应DataTable的列名2 &=[A].对应DataTable的列名3。
课题:利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现。
我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示。
《使用Aspose.Cell控件实现Excel高难度报表的生成(一)》《使用Aspose.Cell控件实现Excel高难度报表的生成(二)》《使用Aspose.Cell控件实现Excel高难度报表的生成(三)》《使用Aspose.Cell控件实现多个Excel文件的合并》以及关于Word的操作的《利用Aspose.Word控件实现Word文档的操作》这些都是我本人的总结,是实实在在的从项目中来,到博客中去的经验总结,本篇主要介绍在Web的模板化文档输出中,Aspose.Word控件和Aspose.Cell控件的使用操作。
模板化的输出,首先是在预定义好固定的模板,然后绑定数据源或者替换相关的文字实现模板化文档的导出操作。
在Aspose.Word的操作对象中,我们可以使用文本替换的方式实现模板内容的修改,简单的操作如下所示。
Document doc = new Document(MyDir + "Document.doc");doc.Range.Replace("wuhuacong", "伍华聪", false, true);也可以以书签引用替换的方式实现,首先要定义好相应的标签引用,操作如下。
在一个Word文档中某固定位置插入一个标签引用,在Word(2007、2010)的【插入】-【书签】中插入指定位置的书签引用,如下所示。
替换标签内容的代码如下所示。
软件开发-.NET使用Aspose.Cells导入导出Excel文件-嘉为科技
【摘要】在.NET软件开发项目中,开发人员经常会碰到Excel导入导出的需求,而传统的使用Microsoft.Office.Interop 或者 Microsoft.ACE.OLEDB 都具有一些使用限制:●需要在服务器端装Excel或者Microsoft.ACE.OLEDB,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM+,如果在导出过程中出问题可能导致服务器宕机。
●Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123。
●导出时,如果字段内容以“-”或“=”开头,Excel会把它当成公式进行,会报错。
●Excel会根据Excel文件前8行分析数据类型,如果正好你前8行某一列只是数字,那它会认为该列为数值型,自动将该列转变成类似1.42702E+17格式,日期列变成包含日期和数字的。
本文将介绍Excel导入导出的另一种方法:Aspose.Cells,它能克服Microsoft.Office.Interop 或者 Microsoft.ACE.OLEDB的这些缺点【正文】使用Aspose.CellsAspose.Cells是比一个比较好用的第三方类库,使用它导入导出Excel不需要服务器安装Excel软件。
利用Aspose.Cells导入Excel第一步:首先必须要下载Aspose.Cells.dll文件,然后在在项目中引用,不需安装。
第二步:在CS文件中添加引用。
using Aspose.Cells;●将用户选择的Excel文件导入到DataTable对象中if (!fileLoad.HasFile){ShowMessage("请选择要导入的Excel文件");return;}string ex = fileLoad.FileName.Split('.').Last();if (ex != "xlsx" && ex != "xls"){ShowMessage("模板必须是Excel文件,请下载正确的模板");return;}Workbook workbook = new Workbook(fileLoad.FileContent);Worksheet worksheet = workbook.Worksheets[0];Cells cells = worksheet.Cells;DataTable dt;dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1,cells.MaxDataColumn + 1, true);上面的代码是将用户选择的Excel文件的内容导入到DataTable,当然Aspose.Cells还提供将Excel的数据导入到GridView、DataView等等数据绑定控件并支持众多参数设置的方法。
aspose.Cells使用方法
aspose.Cells使⽤⽅法1、创建Workbook,aspose提供了5个重载⽤于创建⼀个⼯作簿,通过Worksheets 获取到当前sheet页Workbook中Worksheets属性可以通过sheet的下标和sheet的名称获分别取到将要操作的Worksheet对象,例如Workbook work = new Workbook(@"路径");Worksheet sheet = work.Worksheets["New Worksheet1"];//Worksheet sheet = work.Worksheets[0];//根据下标 wb.Worksheets.Clear(); 删除当前⼯作表 wb.Worksheets.Add("New Worksheet1") 新增⼀个⼯作表2、操作单元格Cell cell = sheet.Cells["A1"];//Cell cell =sheet.Cells[0, 0];cell.PutValue("单元格赋值"); //必须⽤PutValue⽅法赋值cell.Style.ForegroundColor = Color.Yellow;//前景颜⾊cell.Style.Pattern = BackgroundType.Solid;//设置背景样式实线cell.Style.Font.Size = 10;//字体⼤⼩cell.Style.Font.Color = Color.Blue;//背景颜⾊cell.Style.Custom = "ddd, dd mmmm 'yy";//⾃定义格式:cell.Style.Rotation = 90; //旋转字体: string value = cell.StringValue;取值 sheet.Cells[0, 0] 参数可以是对应的x、y轴坐标,也可以是A1、A2这种字符串3、设置单元格计算公式work.Cells["A1"].PutValue(1);work.Cells["B1"].PutValue(1);work.Cells["C1"].Formula = "SUM(A1:B1)";work.CalculateFormula(true);当需要给单元格做就计算公式时,使⽤formula设置指定单元格的公式,在保存之前必须调⽤CalculateFormula ⽅法,默认调⽤⽅法就可以,传⼊true参数忽略计算错误,⽀持⾃定义函数,new CalculationOptions()对象出来⾃⼰做设置4、插⼊图⽚sheet.Pictures.Add(1, 0, "图⽚地址");add⽅法规定了图⽚的插⼊必须传⼊坐标,图⽚可以是流或者地址5、保存work.Save("地址");Stream stream= work.SaveToStream();上⾯⽅法是aspose的原⽣导出⽅法,没破解的aspose.cells 在导出EXCEL,最后会多加⼀个 sheet 然后写上 Evaluation Only.......可以通过NPOI来删除掉试⽤的标记sheet页,将aspose的workbook转为流,使⽤NPOI 读取流,通过xwb.removeSheetAt(xwb.NumberOfSheets() - 1);⽅法删除掉最后⼀个sheet,绕过没有授权的试⽤提醒。
C#使用Aspose.Cells导出excel
C#使⽤Aspose.Cells导出excelC# winform导出excel可以使⽤ Microsoft.Office.Interop.Excel.dll或者Aspose.Cells.dll以及其他⽅法。
Microsoft.Office.Interop.Excel.dll导出速度慢,不适⽤于数据量⼤情况。
Aspose.Cells.dll到处速度很快。
由于Aspose.Cells.dll本⾝收费,所以需要加载破解证书。
Aspose.Cells简介:Aspose.Cells是⼀款功能强⼤的Excel⽂档处理和转换控件,开发⼈员和客户电脑⽆需安装Microsoft Excel也能在应⽤程序中实现类似Excel的强⼤数据管理功能,⽀持所有Excel格式类型的操作,在没有Microsoft Excel的环境下,⽤户也可为其应⽤程序嵌⼊类似Excel的强⼤数据管理功能。
C#中winform使⽤spose.Cells导出excel的⽅法:1.下载aspose.Cells.dll以及破解证书:2.引⽤右键添加引⽤,点击浏览,找到下载的dll⽂件(最好复制到⼯程⽬录),选择Aspose.Cells引⽤3.⼯程右键添加⽂件夹ASPOSE,并右键添加“现有项”aspose.Cells.dll以及破解证书。
分别右键aspose.Cells.dll以及license.lic选择属性,始终复制到输出⽬录。
4.添加usingusing Aspose.Cells;新建DataTableDataTable dt1 = new DataTable();初始化表头:dt1.Columns.Add(new DataColumn("表头1", typeof(string)));dt1.Columns.Add(new DataColumn("表头2", typeof(string)));dt1.Columns.Add(new DataColumn("表头3", typeof(string)));dt1.Columns.Add(new DataColumn("表头4", typeof(string)));添加数据(可以放到循环体)DataRow rowData = dt1.NewRow();rowData["表头1"] = "1"rowData["表头2"] = "2";rowData["表头3"] = "3";rowData["表头4"] = "4";dt1.Rows.Add(rowData);//新增⼀⾏数据将DataTabel写⼊excelExportExcelWithAspose(dt1, "D:\\设备数据.xlsx");函数实现:public static bool ExportExcelWithAspose(System.Data.DataTable data, string filepath){try{if (data == null){MessageBox.Show("数据为空");return false;}Aspose.Cells.License li = new Aspose.Cells.License();li.SetLicense("ASPOSE/License.lic");//破解证书Workbook book = new Workbook(); //创建⼯作簿Worksheet sheet = book.Worksheets[0]; //创建⼯作表Cells cells = sheet.Cells; //单元格//创建样式Aspose.Cells.Style style = book.Styles[book.Styles.Add()];style.Borders[Aspose.Cells.BorderType.LeftBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应⽤边界线左边界线style.Borders[Aspose.Cells.BorderType.RightBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应⽤边界线右边界线 style.Borders[Aspose.Cells.BorderType.TopBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应⽤边界线上边界线style.Borders[Aspose.Cells.BorderType.BottomBorder].LineStyle = Aspose.Cells.CellBorderType.Thin; //应⽤边界线下边界线 style.HorizontalAlignment = TextAlignmentType.Center; //单元格内容的⽔平对齐⽅式⽂字居中 = "宋体"; //字体//style1.Font.IsBold = true; //设置粗体style.Font.Size = 11; //设置字体⼤⼩//style.ForegroundColor = System.Drawing.Color.FromArgb(153, 204, 0); //背景⾊//style.Pattern = Aspose.Cells.BackgroundType.Solid;int Colnum = data.Columns.Count;//表格列数int Rownum = data.Rows.Count;//表格⾏数//⽣成⾏列名⾏for (int i = 0; i < Colnum; i++){cells[0, i].PutValue(data.Columns[i].ColumnName); //添加表头cells[0, i].SetStyle(style); //添加样式}//⽣成数据⾏for (int i = 0; i < Rownum; i++){for (int k = 0; k < Colnum; k++){cells[1 + i, k].PutValue(data.Rows[i][k].ToString()); //添加数据cells[1 + i, k].SetStyle(style); //添加样式}}sheet.AutoFitColumns(); //⾃适应宽book.Save(filepath); //保存MessageBox.Show("Excel成功保存到D盘");GC.Collect();}catch (Exception e){return false;}return true;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
C#使用Aspose.Cells导出Excel简单实现
C#使⽤Aspose.Cells导出Excel简单实现将DataTable导出Xlsx格式的⽂件下载(⽹页输出):1///<summary>2///导出Excel表格3///</summary>4///<param name="list">数据集合</param>5///<param name="header">数据表头</param>6///<returns></returns>7public void ExportExcel(DataTable dt, string[] header)8 {9 Workbook wb = new Workbook(FileFormatType.Xlsx);10try11 {12 Worksheet sheet = wb.Worksheets[0];13 = "MO上⾏查询结果";14if (dt.Rows.Count <= 0)15 {16 System.Web.HttpContext.Current.Response.Write("<script>alert('没有检测到需要导出数据!');</script>");17return;18 }19// 为单元格添加样式20 Aspose.Cells.Style style = wb.CreateStyle();21 style.HorizontalAlignment = Aspose.Cells.TextAlignmentType.Center; //设置居中22 style.Font.Size = 12;//⽂字⼤⼩23 style.Font.IsBold = true;//粗体24 style.HorizontalAlignment = TextAlignmentType.Center;//⽂字居中2526int rowIndex = 0;27for (int i = 0; i < header.Length; i++)28 {29 sheet.Cells[rowIndex, i].PutValue(header[i]);30 sheet.Cells[rowIndex, i].SetStyle(style);31 sheet.Cells.SetColumnWidth(i, 20);//设置宽度32 }33for (int i = 0; i < dt.Rows.Count; i++)//遍历DataTable⾏34 {35 sheet.Cells[i + 1, 0].PutValue(dt.Rows[i]["SENDER"].ToString());36 sheet.Cells[i + 1, 1].PutValue(dt.Rows[i]["SENDCONTENT"].ToString());37 sheet.Cells[i + 1, 2].PutValue("");38 sheet.Cells[i + 1, 3].PutValue(dt.Rows[i]["RECDATE"].ToString());39 sheet.Cells[i + 1, 4].PutValue(dt.Rows[i]["sn"].ToString());40 }41 }42catch (Exception e)43 {44 System.Web.HttpContext.Current.Response.Write("<script>alert('导出异常:" + e.Message + "!');</script>");45 }46#region输出到Excel47using (MemoryStream ms = new MemoryStream())48 {4950 wb.Save(ms, new OoxmlSaveOptions(SaveFormat.Xlsx));//默认⽀持xls版,需要修改指定版本51 System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xlsx", DateTime.Now.ToString("yyyyMMddHHmmssfff")));52 System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";53 System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray());54 wb = null;55 System.Web.HttpContext.Current.Response.End();56 }57#endregion58 }其它相关参考:。
Aspose.cell中的Excel模板导出数据
Aspose.cell中的Excel模板导出数据//Excel模板导数据(Eexcel中根据DataTable中的个数,给多个Sheet中的模板赋值) dict中模板设置 &=$qyear datatable中设置 &=dtName.cloumnName public void DataSetToManyExcel(string fileName, string fileUrl, Page page, DataSet my_ds, Dictionary<string, string> dict = null, params int[] columns){WorkbookDesigner wbookdesiger = new WorkbookDesigner();wbookdesiger.Open(fileUrl); //打开模板try{if (my_ds.Tables.Count > 0){for (var i = 0; i < my_ds.Tables.Count; i++){//设置DataTablewbookdesiger.SetDataSource(my_ds.Tables[i]);//设置变量if (dict != null){foreach (var di in dict)wbookdesiger.SetDataSource(di.Key, di.Value);}wbookdesiger.Process(i, false);//清除数据源wbookdesiger.ClearDataSource();} if (columns.Length > 0) { Style style = wbookdesiger.Workbook.Styles[wbookdesiger.Workbook.Styles.Add()];//新增样式 style.IsTextWrapped = true;//⽂本换⾏样式\n columns.ForEach(c => { var cells = wbookdesiger.Workbook.Worksheets[0].Cells[c]; cells.SetStyle(style); }); }fileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ".xls";wbookdesiger.Save(fileName, SaveType.OpenInExcel, FileFormatType.Excel2003, page.Response);page.Response.End();}}catch (Exception ex){throw ex;}}//Excel模板导数据(Eexcel中根据DataTable中的个数,复制第⼀个Sheet中的模板,然后分别赋值)public void DataSetToOneExcel(string fileName, string fileUrl, Page page, DataSet my_ds, string tabName = "", Dictionary<int, string> my_dic = null){WorkbookDesigner my_designer = new WorkbookDesigner();my_designer.Open(fileUrl);//打开⽂件Workbook my_workbook = my_designer.Workbook;try{if (my_ds.Tables.Count > 0){//给表格赋值for (var i = 0; i < my_ds.Tables.Count; i++){var temp = i + 1 >= my_ds.Tables.Count ? i : i + 1;//TableNameif (i == 0)my_ds.Tables[i].TableName = tabName != "" ? tabName : "dt";elsemy_ds.Tables[temp].TableName = tabName != "" ? tabName + i : "dt" + temp;my_workbook.Worksheets.AddCopy(0);//复制前⼀个Sheet模板my_workbook.Worksheets[i + 1].Replace(my_ds.Tables[0].TableName, my_ds.Tables[temp].TableName);//替换当前Sheet的下个Sheet的TableName my_designer.SetDataSource(my_ds.Tables[i]);my_designer.Process(i, false);my_designer.ClearDataSource();}//删除最后⼀个sheetmy_workbook.Worksheets.RemoveAt(my_workbook.Worksheets.Count - 1);//给Sheet的Name赋值if (my_dic != null){for (var i = 0; i < my_workbook.Worksheets.Count; i++){foreach (var dd in my_dic){if (i == dd.Key)my_workbook.Worksheets[i].Name = dd.Value;}}}fileName = System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8) + ".xls";my_designer.Save(fileName, SaveType.OpenInExcel, FileFormatType.Excel2003, page.Response);page.Response.End();}}catch (Exception ex){throw ex;}}补充:当表格数据列是动态的时候,显然模板就不⼤适⽤了,这时候我们可以使⽤Apose.Cells的填充⽅法Aspose.Cells.WorkbookDesigner wbookdesiger = new Aspose.Cells.WorkbookDesigner();wbookdesiger.Open(fileUrl); //打开模板//wbookdesiger.SetDataSource(dt);//wbookdesiger.Process();//数据渲染var workbook = wbookdesiger.Workbook;//最后合成⼀个DT来,⼀个合成的动态数据表Aspose.Cells.Cell cell = workbook.Worksheets[0].Cells.FindString("#$DATATABLE$#", null, true);//模板中的列,找出模板中固定的单元格if (cell != null){workbook.Worksheets[0].Cells.ImportDataTable(dt, true, );}int temp = 0; //合并单元格while (temp < dt.Rows.Count){var rows = dt.Select(" 序号=" + dt.Rows[temp]["序号"]);workbook.Worksheets[0].Cells.Merge(1 + temp, 0, rows.Length, 1);workbook.Worksheets[0].Cells.Merge(1 + temp, 1, rows.Length, 1);workbook.Worksheets[0].Cells.Merge(1 + temp, 2, rows.Length, 1);workbook.Worksheets[0].Cells.Merge(1 + temp, 3, rows.Length, 1);workbook.Worksheets[0].Cells.Merge(1 + temp, 4, rows.Length, 1);workbook.Worksheets[0].Cells.Merge(1 + temp, 11, rows.Length, 1);workbook.Worksheets[0].Cells.Merge(1 + temp, 12, rows.Length, 1);workbook.Worksheets[0].Cells.Merge(1 + temp, 13, rows.Length, 1);temp += rows.Length;}var sheet = workbook.Worksheets[0];var cells = sheet.Cells;int columnCount = cells.MaxColumn; //获取表页的最⼤列数int rowCount = cells.MaxRow; //获取表页的最⼤⾏数//适应列宽for (int col = 0; col < columnCount; col++){sheet.AutoFitColumn(col, 0, rowCount);}for (int col = 0; col < columnCount; col++){cells.SetColumnWidthPixel(col, cells.GetColumnWidthPixel(col) + 30);}//表格线Aspose.Cells.Style style = workbook.Styles[workbook.Styles.Add()];style.Borders[Aspose.Cells.BorderType.TopBorder].LineStyle = Aspose.Cells.CellBorderType.Thin;style.Borders[Aspose.Cells.BorderType.TopBorder].Color = System.Drawing.Color.Black;style.Borders[Aspose.Cells.BorderType.BottomBorder].LineStyle =Aspose.Cells. CellBorderType.Thin;style.Borders[Aspose.Cells.BorderType.BottomBorder].Color = System.Drawing.Color.Black;style.Borders[Aspose.Cells.BorderType.LeftBorder].LineStyle = Aspose.Cells.CellBorderType.Thin;style.Borders[Aspose.Cells.BorderType.LeftBorder].Color = System.Drawing.Color.Black;style.Borders[Aspose.Cells.BorderType.RightBorder].LineStyle =Aspose.Cells.CellBorderType.Thin;style.Borders[Aspose.Cells.BorderType.RightBorder].Color = System.Drawing.Color.Black;Aspose.Cells.Range wstrange = sheet.Cells.CreateRange(0, 0, sheet.Cells.MaxRow + 1, sheet.Cells.MaxColumn + 1);Aspose.Cells.StyleFlag stFlag = new Aspose.Cells.StyleFlag();stFlag.All = true;wstrange.ApplyStyle(style, stFlag);var stream = workbook.SaveToStream();return File(stream.ToArray(), "application/octet-stream", "xxxx.xls");。
Aspose.Cells操作说明
FirstVisibleColumn FirstVisibleRow HPageBreaks Hyperlinks Index IsGridlinesVisible IsPageBreakPreview IsProtected IsRowColumnHeadersVisible IsVisible ListObjects Name OleObjects Outline PageSetup
string
说明
要替换字符串(完全相等) 替换字符串
利用Aspose.Cells和Excel模板导出统计数据
利⽤Aspose.Cells和Excel模板导出统计数据在项⽬中要进⾏导出Excel报表给客户,⾥⾯有统计,就⼼思⽤Aspose.Cells 配合实体类数据直接导出。
结果呢⽐较⿇烦。
然后就检索找到利⽤Excel模板配合实体类数据导出。
总的来说⼀般的报表⽣成,基本上是基于以下⼏种⽅式:⼀种是基于微软Excel内置的引擎来实现;⼀种是构造HTML格式的Excle报表;⼀种是基于控件的⽅式来处理,基于控件有很多种⽅式,个⼈认为⽐较有名的是Aspose.Cell和NPOI,下⾯⽤到的是Aspose.Cell效果图:Excel模板及相关变量报表1模板如下所⽰(其中通过引⽤集合的对象是通过&=来引⽤,对象的属性或者列名,通过如&=Export.作业完成计划⽅式引⽤,⾮常直观⽅便)Aspose.Cell控件⽀持多种参数变量的绑定操作,如⽀持DataSet、Datatable、IList集合,实体类集合、类对象等。
下⾯我主要⽤List 实体类集合protected void ExportExcel_ServerClick(object sender, EventArgs e){HttpCookie getCookies = Request.Cookies["UserLogin"];if (getCookies != null){string[] strParm = hfExcelData.Value.Split(',');List<jianpinorzhen_view> getJianPinOrZhenData = SearchExportData.LstSearchExportJianPinOrZhen(Server.UrlDecode(getCookies["SqlConString"]), getCookies["CustomCode"],getCookies["CustomType"],strParm[0], strParm[1], strParm[2], strParm[3], strParm[4]);//创建⼀个workbookdesigner对象WorkbookDesigner designer = new WorkbookDesigner();//制定报表模板switch (strParm[4]){case "⼯⼚⼊货箱单信息":designer.Open(Server.MapPath(@"model\AllWarehousing.xls"));break;case "上货开箱信息":designer.Open(Server.MapPath(@"model\Warehousing.xls"));break;case "检品之后信息":designer.Open(Server.MapPath(@"model\Dress_Jp.xls"));break;case "检针之后信息":designer.Open(Server.MapPath(@"model\Dress_Jz.xls"));break;default:break;}//设置实体类对象<span style="color:#FF0000;">这⾥设置了Export 变量,然后在模板⾥⾯我们就⽤了。
使用Aspose.Cells组件生成Excel文件实例
使⽤Aspose.Cells组件⽣成Excel⽂件实例⽣成带表头的Excel⽂件,格式如下显⽰。
当然更复杂的⼀些也可以通过合并单元格的⽅法 public void Merge(int firstRow, int firstColumn, int totalRows, int totalColumns)来实现。
1. ⾸先,需要添加对"Aspose.Cells.dll"的引⽤。
2. 实现代码如下:复制代码代码如下://新建⼯作簿Workbook workbook = new Workbook(); //⼯作簿Worksheet sheet = workbook.Worksheets[0]; //⼯作表Cells cells = sheet.Cells;//单元格Style style = workbook.Styles[workbook.Styles.Add()];//新增样式#region 表头//标题style.HorizontalAlignment = TextAlignmentType.Center;//⽂字居中 = "宋体";//⽂字字体style.Font.Size = 18;//⽂字⼤⼩style.Font.IsBold = true;//粗体cells.Merge(0, 0, 1, 12); //合并单元格cells[0, 0].PutValue("标准化⼯作意见建议汇总表"); //填写内容cells[0, 0].SetStyle(style); //给单元格关联样式cells.SetRowHeight(0, 28); //设置⾏⾼//发布时间style.HorizontalAlignment = TextAlignmentType.Left;style.Font.Size = 11;style.Font.IsBold = false;cells.Merge(1, 0, 1, 7);cells[1, 0].PutValue(String.Format("发布起⽌时间:{0}⾄{1}",DateTime.Now.AddDays(-1).ToString("yyyy年MM⽉dd ⽇"),DateTime.Now.ToString("yyyy年MM⽉dd⽇")));cells[1, 0].SetStyle(style);cells.SetRowHeight(1, 20);//统计时间style.HorizontalAlignment = TextAlignmentType.Right;style.Font.Size = 11;style.Font.IsBold = false;cells.Merge(1, 7, 1, 5);cells[1, 7].PutValue(String.Format("统计时间:{0}", DateTime.Now.ToString("yyyy年MM⽉dd⽇")));cells[1, 7].SetStyle(style);cells.SetRowHeight(1, 20);#endregion#region 表格#region 表格标题⾏//序号style.HorizontalAlignment = TextAlignmentType.Center;cells[2, 0].PutValue("序号");cells[2, 0].SetStyle(style);cells.SetRowHeight(2, 20);cells.SetColumnWidthPixel(0, 38);//建议时间cells[2, 1].PutValue("建议时间");cells[2, 1].SetStyle(style);cells.SetColumnWidthPixel(1, 77);//建议部门cells[2, 2].PutValue("建议部门");cells[2, 2].SetStyle(style);cells.SetColumnWidthPixel(2, 107);//建议⼈cells[2, 3].PutValue("建议⼈");cells[2, 3].SetStyle(style);cells.SetColumnWidthPixel(3, 69);//类别cells[2, 4].PutValue("类别");cells[2, 4].SetStyle(style);cells.SetColumnWidthPixel(4, 71);//业务种类cells[2, 5].PutValue("业务种类");cells[2, 5].SetStyle(style);cells.SetColumnWidthPixel(5, 71);//标准名称cells[2, 6].PutValue("标准名称");cells[2, 6].SetStyle(style);cells.SetColumnWidthPixel(6, 114);//标准章、条编号cells[2, 7].PutValue("标准章、条编号");cells[2, 7].SetStyle(style);cells.SetColumnWidthPixel(7, 104);//意见建议cells[2, 8].PutValue("意见建议");cells[2, 8].SetStyle(style);cells.SetColumnWidthPixel(8, 255);//处理部门cells[2, 9].PutValue("处理部门");cells[2, 9].SetStyle(style);cells.SetColumnWidthPixel(9, 72);//处理进度cells[2, 10].PutValue("处理进度");cells[2, 10].SetStyle(style);cells.SetColumnWidthPixel(10, 72);//备注cells[2, 11].PutValue("备注");cells[2, 11].SetStyle(style);cells.SetColumnWidthPixel(11, 255);#endregion#endregionSystem.IO.MemoryStream ms = workbook.SaveToStream();//⽣成数据流 byte[] bt = ms.ToArray();workbook.Save(@"E:\test.xls");//保存到硬盘}复制代码代码如下://下载System.IO.MemoryStream ms = workbook.SaveToStream();//⽣成数据流byte[] bt = ms.ToArray();string fileName = "标准化⼯作意见建议汇总表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";//客户端保存的⽂件名//以字符流的形式下载⽂件Response.ContentType = "application/vnd.ms-excel";//通知浏览器下载⽂件⽽不是打开Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));Response.BinaryWrite(bt);Response.Flush();Response.End();。
C#winform导出导入ExcelDoc完整实例教程[网上看到的]
C#winform导出导⼊ExcelDoc完整实例教程[⽹上看到的]还真没做过winform的导出导⼊,今天上⽹百度了⼀下。
结果---所以还是我⾃⼰写个吧。
之前做过web的,半搬半做就OK。
1添加引⽤:Aspose.Cells.dll(我们就叫⼯具包吧,可以从⽹上下载。
关于它的操作我在“Aspose.Cells操作说明中⽂版下载 Aspose C# 导出Excel 实例”⼀⽂中的说。
这⾥你暂时也可不理会它。
)Aspose.Cells.dll 和中⽂说明下载地址:即使没有安装office也能⽤噢,这是⼀个好强的⼤⼯具。
2编写Excel操作类using System;using System.Collections.Generic;using System.Text;using Aspose.Cells;using System.Data;public class AsposeExcel{private string outFileName = "";private string fullFilename = "";private Workbook book = null;private Worksheet sheet = null;public AsposeExcel(string outfilename, string tempfilename)//导出构造数{outFileName = outfilename;book = new Workbook();// book.Open(tempfilename);这⾥我们暂时不⽤模板sheet = book.Worksheets[0];}public AsposeExcel(string fullfilename)//导⼊构造数{fullFilename = fullfilename;// book = new Workbook();//book.Open(tempfilename);//sheet = book.Worksheets[0];}private void AddTitle(string title, int columnCount){sheet.Cells.Merge(0, 0, 1, columnCount);sheet.Cells.Merge(1, 0, 1, columnCount);Cell cell1 = sheet.Cells[0, 0];cell1.PutValue(title);cell1.Style.HorizontalAlignment = TextAlignmentType.Center; = "⿊体";cell1.Style.Font.Size = 14;cell1.Style.Font.IsBold = true;Cell cell2 = sheet.Cells[1, 0];cell1.PutValue("查询时间:" + DateTime.Now.ToLocalTime());cell2.SetStyle(cell1.Style);}private void AddHeader(DataTable dt){Cell cell = null;for (int col = 0; col < dt.Columns.Count; col++){cell = sheet.Cells[0, col];cell.PutValue(dt.Columns[col].ColumnName);cell.Style.Font.IsBold = true;}}private void AddBody(DataTable dt){for (int r = 0; r < dt.Rows.Count; r++){for (int c = 0; c < dt.Columns.Count; c++){sheet.Cells[r + 1, c].PutValue(dt.Rows[r][c].ToString());}}}//导出------------下⼀篇会⽤到这个⽅法public Boolean DatatableToExcel(DataTable dt){Boolean yn = false;try{// = sheetName;//AddTitle(title, dt.Columns.Count);//AddHeader(dt);AddBody(dt);sheet.AutoFitColumns();//sheet.AutoFitRows();book.Save(outFileName);yn = true;return yn;}catch (Exception e){return yn;// throw e;}}public DataTable ExcelToDatatalbe()//导⼊{Workbook book = new Workbook();book.Open(fullFilename);Worksheet sheet = book.Worksheets[0];Cells cells = sheet.Cells;//获取excel中的数据保存到⼀个datatable中DataTable dt_Import = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, false); // dt_Import.return dt_Import;}}3导出按钮事件中编写导出数据⽅法:private void bt_excel_out_Click(object sender, EventArgs e){SaveFileDialog saveFileDialog1 = new SaveFileDialog();//如果你直接从对话框中拉出来,就不⽤new了噢。
使用Aspose插件对Excel操作
使⽤Aspose插件对Excel操作使⽤使⽤Aspose插件对Excel⽂档进⾏导⼊导出操作使⽤前请先下载Aspose插件引⽤Excel导⼊:前台使⽤file标签获取,submit⽅式提交。
<form id="form1" enctype="multipart/form-data" method="post"><table class="table-condensed"><tr><td class="text-right">导⼊表格:</td><td class="text-left"><input type="file" name="file1" class="btn btn-default btn-lg"/></td></tr><tr><td class="text-left"><input type="submit" id="btnImport" name="btnImport" value="导⼊" class="btn btn-default"/></td></tr></table></form>后台接收:HttpPostedFileBase fileBase = Request.Files["file1"];//这⾥获取名称与前台标签name保持⼀致if (fileBase != null){string filename = Path.GetFileName(fileBase.FileName);string extension = Path.GetExtension(filename);string path = "/Upload/Test/" + DateTime.Now.ToString("yyyyMMdd") + "/";Directory.CreateDirectory(Path.GetDirectoryName(Request.MapPath(path)));string newFilename = DateTime.Now.ToString("yyyyMMddHHmmssfff");string fullFileName = path + newFilename + extension;fileBase.SaveAs(Request.MapPath(fullFileName)); try{ Stopwatch sw = new Stopwatch();//记录导⼊操作⽤时多长sw.Start();//这⾥可放⼊BLL⽅法处理string result = new ProductBLL().ImportExcel(Request.MapPath(path), newFilename, extension);//BLL⽅法 ProductBLLpublic string ImportExcel(string path, string filename, string extension){Workbook workbook = new Workbook(path + filename + extension);Worksheet worksheet = workbook.Worksheets[0];Cells cells = worksheet.Cells;for (int i = 1; i < cells.Rows.Count; i++){try{string brand = cells[i, 0].StringValue.Trim();//获取列值string years = cells[i, 1].StringValue.Trim();}catch (Exception e){continue;}}return "OK";} sw.Stop();long runTime = sw.ElapsedMilliseconds / 1000; //获取到操作⽤时多少秒 } catch (Exception e){Log.Write("导⼊", "导⼊错误", "错误信息:" + e.Message);}}Excel导出:string path = "/Upload/Test/" + DateTime.Now.ToString("yyyyMMdd") + "/";Directory.CreateDirectory(Path.GetDirectoryName(Server.MapPath(path)));string newFilename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";string fullFileName = Server.MapPath(path + newFilename);public void ExportInfo(List<Test> list, string fullFileName){Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();Aspose.Cells.Worksheet cellSheet = workbook.Worksheets[0];cellSheet.PageSetup.LeftMargin = 0.3;//左边距cellSheet.PageSetup.RightMargin = 0.3;//右边距cellSheet.PageSetup.TopMargin = 1;//上边距cellSheet.PageSetup.BottomMargin = 0.5;//下边距cellSheet.PageSetup.FooterMargin = 0.5;//页脚cellSheet.PageSetup.HeaderMargin = 0.5;//页眉cellSheet.PageSetup.Orientation = ndscape;cellSheet.PageSetup.CenterHorizontally = true;//⽔平居中cellSheet.PageSetup.CenterVertically = true;cellSheet.Cells[0, 0].PutValue("货号");cellSheet.Cells[0, 1].PutValue("颜⾊");cellSheet.Cells[0, 2].PutValue("尺码");int i = 1;foreach (var item in list){cellSheet.Cells[i, 0].PutValue(item.productno);cellSheet.Cells[i, 1].PutValue(item.size);cellSheet.Cells[i, 2].PutValue(item.color);i++;}cellSheet.AutoFitColumns();fullFileName = Path.GetFullPath(fullFileName);workbook.Save(fullFileName);}return File(fullFileName, "application/ms-excel", UserName + "_Test单" + newFilename);// ⽅法Action⾥直接返回File⽂件下载。
使用Aspose.Cell控件实现Excel高难度报表的生成(三)
使用Aspose.Cell控件实现Excel高难度报表的生成(三)在之前几篇文章中,介绍了关于Apsose.cell这个强大的Excel操作控件的使用,相关文章如下:这几篇文章,都对Apose.Cell这个控件生成各种Excel的方式进行了阐述,对直接把DataTable或者IList生成Excel的操作,对通过模板方式实现自定义报表的各种方式,以及多个文件的合并的方式进行了介绍。
本文继续介绍该控件进一步的使用,也主要介绍如何动态生成(不使用模板文件)各种单元格,以及图表的增加等功能,介绍生成的表格完全自定义,这个报表时一个典型的图文并茂的统计报表,它的最终样式如下所示。
这个报表,表格数据是动态生成,图形则是直接从窗体的图表控件(如ZedGraph图表控件)或者PictureBox控件中获取,写入Excel文档中的。
测试程序主界面如下所示。
和很多其他的Excel操作控件(NPOI、Myxls)一样吗,Apose.Cell也提供了WorkBook、WorkSheet、Range、Cell这些对象的包装,操作这些对象,基本上能够满足我们各种复杂的需求,给我们更加弹性化的操作。
Workbook workbook = new Workbook();Worksheet worksheet = workbook.Worksheets[0];这几个对象是操作Excel必须的,如果需要设定生成的Excel打印预览的参数,进行一些属性设置,如下所示。
Workbook workbook = new Workbook();Worksheet worksheet = workbook.Worksheets[0];worksheet.PageSetup.Orientation =ndscape;//横向打印worksheet.PageSetup.Zoom = 100;//以100%的缩放模式打开 worksheet.PageSetup.PaperSize = PaperSizeType.PaperA4;我们知道,由于该报表完全是手工生成,报表的标题,以及下面几行说明文字,也是需要生成的,操作其实就是把一些单元格合并为一个区域(Range),然后赋值,改变样式就可以了,如下所示的效果和代码Range range; Cell cell;int colSpan = 4 + DeptNameList.Count * 2;range = worksheet.Cells.CreateRange(0, 0, 1, colSpan);range.Merge();range.RowHeight = 20;range.Style = CreateTitleStyle(workbook);cell = range[0, 0];cell.PutValue("患病情况统计");range = worksheet.Cells.CreateRange(1, 0, 1, colSpan);range.Merge();range.RowHeight = 15;cell = range[0, 0];cell.PutValue("所选部别范围内,总计有1000名人员,查询统计结果如下:");range = worksheet.Cells.CreateRange(2, 0, 1, colSpan);range.Merge();range.RowHeight = 15;cell = range[0, 0];cell.PutValue("自2007-1-1开始到现在,统计共有500人有患病史,累计900人次,患病情况如下表:");报表中最复杂的是表头的生成,因为它是不规则的表头,因此需要很细的操作Cell和Range 对象,实现复杂表头(也是很常见的)的生成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件。
这个组件的强大之处,就不多说,对于我们的报表总是会有导出Excel的处理,如果你使用微软Excel的com组件,那么对于简单的操作还行,但是多余复杂的模板,那将是一个令人头疼的事。
在Aspose.Cells之下,将是一个简单的事情。
他可以导入导出excel操作,在本节将要说的就是他的际遇excel模板的导出强大功能。
多的不说,我们先来利用Northwind做两个小demo。
先说说Aspose.Cells的模板语法:
1.&=DataSource.Field,&=[DataSource].[Field]是对DataTable和几何类型的引用,将会从当前行开
始竖直向下生成多行数据。
2.&=$data:是对变量或数组的引用。
数组存在skip,horizontal等属性,具体参见官方网站
3.&=&=动态公式计算;{r}当前行,{c}当前列,{-n},{n}当前行或列的偏移量前n或后n。
4.&==是动态计算,如excel,if等语句。
(if(logic_test,true_value,false_value))
还有其他更为复杂的汇总计算的表达式,这里也不在这节多讲,有兴趣的朋友,可以去官网看看。
我们先来个简单的例子,光说,总是不行的,还是要代码实践才能说明一切:
Excel模板1:
代码:在我们的代码中添加数据源:
如下:
View Code
1var sql = @"select * from Customers
2 where Customers.City ='London'";
3 var dt=GetDataTable(sql);
4 dt.TableName = "Customers";
5 WorkbookDesigner designer = new WorkbookDesigner();
6 designer.Open(MapPath("~/1.xls"));
7//数据源
8 designer.SetDataSource(dt);
9//报表单位
10 designer.SetDataSource("ReportUtils", "xxxxx有限公司客户信息");
11 designer.SetDataSource("ReportAdd", "London");
12//截止日期
13 designer.SetDataSource("ReportDate", DateTime.Now.ToString("yyyy年MM月dd日"));
14
15 designer.Process();
16
17 designer.Save(string.Format("report.xls"), SaveType.OpenInExcel, FileFormatType.E xcel2003, Response);
18 Response.Flush();
19 Response.Close();
20 designer = null;
21 Response.End();
代码很简单,就是添加了一个datatable,和几个变量的数据源,我们所生成excel为:
这就完成了我们的一个简单的多表头数据导出报表。
Demo2中我们将来尝试下他的统计公式和函数计算(利用&=&=计算):
Excel模板2:Northwind的Order Details表
代码:和上面不同的就只有几句:
View Code
1var order = GetDataTable(@"select * from [Order Details]
2 where [Order Details].OrderID=10248");
3 order.TableName = "Order";
4
5designer.SetDataSource(order);
复制代码
Excel效果:
Excel模板下载全部代码:
View Code
1protected void Page_Load(object sender, EventArgs e)
2 {
3 var s=Aspose.Cells.CellsHelper.GetVersion();
4 var sql = @"select * from Customers
5 where Customers.City ='London'";
6 var dt=GetDataTable(sql);
7 dt.TableName = "Customers";
8 var order = GetDataTable(@"select * from [Order Details]
9 where [Order Details].OrderID=10248");
10 order.TableName = "Order";
11 WorkbookDesigner designer = new WorkbookDesigner();
12 designer.Open(MapPath("~/1.xls"));
13//数据源
14 designer.SetDataSource(dt);
15 designer.SetDataSource(order);
16//报表单位
17 designer.SetDataSource("ReportUtils", "xxxxx有限公司客户信息");
18 designer.SetDataSource("ReportAdd", "London");
19//截止日期
20 designer.SetDataSource("ReportDate", DateTime.Now.ToString("yyyy年MM月dd日"));
21
22 designer.Process();
23
24 designer.Save(string.Format("report.xls"), SaveType.OpenInExcel, FileFormatType.Ex cel2003, Response);
25 Response.Flush();
26 Response.Close();
27 designer = null;
28 Response.End();
29 }。