宝哥软件园

使用Aspose 实现通用导出功能的单元

编辑:宝哥软件园 来源:互联网 时间:2021-08-28

最近做了一个项目,客户对导出excel情有独钟。几乎每个列表数据都需要支持导出excel。为了避免代码重复,多才多艺的小码农开发了多才多艺的出口QAQ。

导出Excel无非是把数据取出来,用插件Aspose.Cells填充到Excel文件中,DataTable类型的数据最适合填充Excel。唯一的问题是,数据表数据的列标题通常是英文的。突然,我想出了一个方法,通过使用SQL Server中每一列的描述来替换英文列标题。我太聪明了。

///摘要///导出////summary///param name='dt '导出的数据表/param///param name='dic '字段名称,字段中文名称/param///param name='title '导出第一行标题/param/返回/返回公共工作簿导出数据(数据表表,Dictionarystring,string dic,string title='') { title=string .IsNullOrEmpty(标题)?'导出数据:标题;工作簿=新工作簿();工作簿。工作表。移除at(0);//移除第一个工作表变量温度数组=系统激活器。CreateInstanceT().GetType().FullName.Split('。');//字符串tableName=TempStrarray[TempStrarray].count()-1];//这两句是反射生成要操作的表格名称的,var baseDic=GetColumnsByTable(tableName,' ');foreach(表中的数据列项。列){字符串chsColumnName=if (baseDic .TryGetValue(项。列名,out chsColumnName)!字符串IsNullOrEmpty(chsColumnName))项ColumnName=chsColumnNameif (dic .TryGetValue(项。列名,out chsColumnName)!字符串IsNullOrEmpty(chsColumnName))项column name=ChsColumn name } int Colnum=table .列。计数;//表格列数int Rownum=table .行。计数;//表格行数工作表=工作簿。工作表。添加(标题);单元格单元格=工作表。细胞;//单元格//为标题设置样式Style styleTitle=工作簿。样式[工作簿。样式。add()];//新增样式styleTitle .水平对齐=文本对齐类型。居中;//文字居中styleTitle .字体。名称='宋体;//文字字体styleTitle .字体大小=18;//文字大小styleTitle .字体。IsBold=true//粗体//样式2样式样式2=工作簿。样式[工作簿。样式。add()];//新增样式风格2 .水平对齐=文本对齐类型。居中;//文字居中风格2 .字体。名称='宋体;//文字字体风格2 .字体大小=13;//文字大小风格2 .字体。IsBold=true//粗体风格2 .IsTextWrapped=true//单元格内容自动换行风格2 .边框[边框类型。左边框]。LineStyle=CellBorderType .瘦;风格2 .边框[边框类型。右边框]。LineStyle=CellBorderType .瘦;风格2 .边框[边框类型TopBorder].LineStyle=CellBorderType .瘦;风格2 .边框[边框类型。底部边框]。LineStyle=CellBorderType .瘦;//样式3样式样式3=工作簿。样式[工作簿。样式。add()];//新增样式风格3 .水平对齐=文本对齐类型。居中;//文字居中风格3 .字体。名称='宋体;//文字字体风格3 .字体大小=12;//文字大小风格3 .边框[边框类型。左边框]。LineStyle=CellBorderType .瘦;风格3 .边框[边框类型。右边框]。LineStyle=CellBorderType .瘦;风格3 .边框[边框类型TopBorder].LineStyle=CellBorderType .瘦;风格3 .边框[边框类型。底部边框]。LineStyle=CellBorderType .瘦;//生成行一标题行细胞。合并(0,0,1,Colnum);//合并单元格单元格[0,0]。PutValue(标题);//填写内容单元格[0,0]。SetStyle(样式标题);细胞. SetRowHeight(0,38);//生成行2列名行for(int I=0;i Colnumi ) { cells[1,i].PutValue(表。列[i].列名);细胞[1,i].SetStyle(样式2);细胞. SetRowHeight(1,25);细胞SetColumnWidth(i,30);} //生成数据行for(int I=0;I RowNumi){ for(int k=0;细胞[2 i,k].PutValue(表。行[i][k].ToString());if (k==Colnum - 1) { style3 .水平对齐=文本对齐类型。向左;//文字居中} else { style3 .水平对齐=文本对齐类型。居中;//文字居中}单元格[2 i,k].SetStyle(样式3);}细胞SetRowHeight(2 i,24);}返回工作簿;}

///摘要///获取某个表下面的所有列名和说明////summary///param name=' tbname '表名/param///param name='orderrule '排序规则/param///返回公共字典字符串,字符串GetColumnsByTable(字符串tbname,字符串顺序规则){ StringBuilder sqlsb=new StringBuilder();sqlsb .追加(“SELECT distinct columns name=c . name,Description=isnull(ex.value,' ')”));sqlsb .追加(' FROM sys。列c LEft OUTER JOIN sys。extended _ properties ex ');sqlsb .追加(' ON ex。major _ id=c . object _ id AND ex。minor _ id=c . column _ id AND ex。名称=' MS _ Description ' ');sqlsb .追加(' c.system_type_id=t.xtype '上的左外部联接systypes t’;sqlsb .追加(“WHERE”对象属性(c . object _ id,‘IsMsShipped’)=0 AND’);sqlsb .追加(' ObJect _ NAME(c . ObJect _ id)=“{ 0 }”;if(!字符串IsNullOrEmpty(顺序规则)){ sqlsb .追加('按列排序名称{ 1 } ');} else { sqlsb .追加('按列排序名称ASC’);} string exsql=string .格式(sqlsb .ToString(),tbname,顺序规则);数据表dt=数据库FromSql(exsql).ToTable()作为DataTable//用了软件框架QAQ Dictionarystring,string dic=new Dictionarystring,string();if (dt!=空dt .行数。计数0){ for(int I=0;我决定。行。计数;i ) { dic .添加(dt .行[i][0].ToString(),dt .行[一][1].ToString());} }返回dic}两个搞定了,能实现绝大部分的导出业务。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

更多资讯
游戏推荐
更多+