当前位置: 首页 > news >正文

类似于拼多多的网站怎么做dedecms网站制作教程

类似于拼多多的网站怎么做,dedecms网站制作教程,开发区是什么意思,wordpress页面相册目录 问题现象 范例运行环境 解决方案 剪贴板加特殊粘贴 自定义样式 直接赋值 完美方案 小结 问题现象 在运行数据表数据导出到 EXCEL 数据输出时遇到了一个问题&#xff0c;开发者设计了单行细线下边框的输出模板&#xff0c;如下图设计&#xff1a; 其中 <%syst…

 

目录

问题现象

范例运行环境

解决方案

剪贴板加特殊粘贴

自定义样式

直接赋值

完美方案 

小结


问题现象

在运行数据表数据导出到 EXCEL 数据输出时遇到了一个问题,开发者设计了单行细线下边框的输出模板,如下图设计:

其中 <%system.excel.title.dyna.by.craneoffice%> 字符标记用于输出报表标题替换。数据从A5列开始至D5列结束,按行输出。期望得到如下输出样式:

虽然已经自定义了复制样式的方法,包括边框风格的复制,但实际输出遇到了如下情况:

实际想要得到的单行细线下边框输出没有实现,使用简单 Borders.LineStyle 赋值没有奏效,以后输出的行复制第一行的样式没有成功,因此需要调整样式输出策略,实现类似格式刷那样的操作,这样即实现了格式输出的完整性,也保证了性能。

范例运行环境

操作系统: Windows Server 2019 DataCenter

.net版本: .netFramework4.0 或以上

Office Excel 2016

开发工具:VS2019  C# 

解决方案

剪贴板加特殊粘贴

使用 COM 操作的流程原理如下图:

实现代码,示例如下:

SRange.Copy();  //将源选定范围复制到剪贴板   
Range.PasteSpecial(Excel.XlPasteType.xlPasteFormats);  //特殊粘贴格式到目标选定范围

Copy() 方法实现了复制所有数据到剪贴板功能,其中也包括了样式。 PasteSpecial() 方法实现了指定粘贴的功能,其中 Excel.XlPasteType.xlPasteFormats 表示只粘贴格式样式,至此实现了模拟格式刷的功能。 但此方法可能会引起多 Excel 应用的复制冲突,因此相对保险的写法可以改成如下代码:

SRange.Copy(Range);

但这样会有一个问题是,如果像模板输出还好,但想要仅粘贴格式则无法实现,因此也有局限性。而且这种实现原理,微软可能也会有所调整,也无法保障以后的应用是否会引起复制冲突。所以我们在下个小节通过自定义样式的方式来模拟格式刷的功能。

自定义样式

使用 COM 操作的流程原理如下图:

示例代码如下:

string stylename = Guid.NewGuid().ToString();
WorkBook xb=WorkBooks[1];Style newStyle = xb.Styles.Add(stylename);设置样式属性
newStyle.Font.Name = "宋体";
newStyle.Font.Size = 11;
newStyle.Font.Bold = true;newStyle.Borders.Weight = XlBorderWeight.xlHairline;  //最细的线
newStyle.Borders.LineStyle = XlLineStyle.xlContinuous;  //实线

以上是添加样式的示例,因为样式很多,实现格式复制的简单方法,是创建新名称并直接引用源单元格的样式,应用到目标选范围上即可,如果有需要移除或修改的样式,可以继续对新建样式进行赋值,修改后如下代码示例:

string stylename = Guid.NewGuid().ToString();
WorkBook xb=WorkBooks[1];Style newStyle = xb.Styles.Add(stylename);newStyle = SRange.Style;  //将源选定范围样式赋值到自定义新建样式newStyle.Font.Name="宋体"; //修改字体为宋体Range.Style = newStyle.Name;

直接赋值

Range.Style 是一个 dynamic 类型,可以赋予任何可以正确实现的类型,如自定义样式名称(newStyle.Name),也可以直接赋值为 Style 类型,简单而暴力,代码如下:


Range.Style = SRange.Style;  //将源选定范围样式赋值到目标

完美方案 

在实际的运行中,无论是自定义样式还是直接赋值模式,对复制字体时出现了无法复制的问题,因此还是需要结合自定义复制样式方法来弥补问题,代码如下:

public void copyRangeStyle(Excel.Range srcRange,Excel.Range desRange)
{desRange.Font.Background=srcRange.Font.Background;desRange.Font.Bold=srcRange.Font.Bold;desRange.Font.Color=srcRange.Font.Color;desRange.Font.Italic=srcRange.Font.Italic;desRange.Font.Name=srcRange.Font.Name;desRange.Font.OutlineFont=srcRange.Font.OutlineFont;desRange.Font.Shadow=srcRange.Font.Shadow;desRange.Font.Size=srcRange.Font.Size;desRange.Font.Strikethrough=srcRange.Font.Strikethrough;desRange.Font.Underline=srcRange.Font.Underline;desRange.RowHeight=srcRange.RowHeight;desRange.HorizontalAlignment=srcRange.HorizontalAlignment;desRange.VerticalAlignment=srcRange.VerticalAlignment;
}

 copyRangeStyle 自定义复制样式方法包括 源选定范围参数(Excel.Range srcRange)和目标选定范围参数(Excel.Range desRange),至此,完整代码可修整如下:

Range.Style = SRange.Style;copyRangeStyle(SRange, Range);

至此结合  copyRangeStyle 方法完美解决样式复制问题。

copyRangeStyle 方法请根据实际需要的样式进行扩充或调整。

小结

关于 Range.Borders 的COM 操作如下图:

这个样式的设定是有点击顺序的,选边框后点击样式是无效的,需要点击样式再进行选边框的切换,才会得到预期效果。正常可通过 Range.Borders 直接表示所有6个框线的集合,直接为其赋值,如下代码:

newStyle.Borders.Weight = XlBorderWeight.xlHairline;  //最细的线
newStyle.Borders.LineStyle = XlLineStyle.xlContinuous;  //实线类型边框
newStyle.Borders.Color = Color.Red;  //红色边框

如果想只设置某一边框,则需要获取 Borders 集合里的 Border,如下几种方式都可以获取其中的某一个 Border 对象:


//右、左、下、上边框
Range.Borders.get_Item(XlBordersIndex.xlEdgeRight).LineStyle = XlLineStyle.xlLineStyleNone;
Range.Borders.get_Item(XlBordersIndex.xlEdgeLeft).LineStyle = XlLineStyle.xlContinuous;
Range.Borders.get_Item(XlBordersIndex.xlEdgeBottom).LineStyle = XlLineStyle.xlContinuous;
Range.Borders.get_Item(XlBordersIndex.xlEdgeTop).LineStyle = XlLineStyle.xlContinuous;//内部交叉斜线
Range.Borders.Item[XlBordersIndex.xlDiagonalDown].LineStyle = XlLineStyle.xlLineStyleNone;
Range.Borders[XlBordersIndex.xlDiagonalUp].LineStyle = XlLineStyle.xlLineStyleNone;

我们可以使用 Borders.get_Item 方法或引用 Item 索引或直接引用索引的方法得到 Border,但实际的使用过程中,预期效果不理想,因此我们使用了样式赋值,类似格式刷的方法来解决。 

更多可参考如下文章链接:

https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.excel.xlbordersindex?view=excel-pia&source=recommendations

https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.excel.styles?view=excel-pia

《C# 实现二维数据数组导出到 Excel》

本文代码仅供您参考使用,感谢您的阅读,希望本文能够对您有所帮助。

http://www.yayakq.cn/news/71793/

相关文章:

  • 单页购物网站源码在东莞做
  • asp.net 发布网站 ftp长沙企业建站
  • 网站开发的pc或移动端网站域名备案查询官网
  • 服务器系统搭建网站源码做网站的封面图片哪里才有
  • 网站开发岗位职责中小企业网站制作广州网络服务公司找赛合公司
  • 招聘网站建设初衷wordpress批量上传文章
  • 用jsp做校园网站福田欧曼价格
  • 为什么要找对做网站的公司应用搭建平台
  • 不用网站做淘宝客备案的时候需要网站吗
  • 网站建设(信科网络)三好街网站建设与维护
  • 无锡江阴做网站公司搭建网站成本
  • 惠州网站建设一般多少钱南通网站建设入门
  • asp.net企业网站框架优化设计七年级上册语文答案
  • 辽宁省网站备案要求福州网站建设方案外包
  • 手机网页版网站开发公共事业管理专业教材建设研究 教学成果奖申报网站
  • 网站建设彩票网学编程哪个机构好
  • 团购汽车最便宜的网站建设网站建设开票多少个点
  • 网站类型有哪些对网站的建议
  • 网站开发用什么软件编程小目标网站建设
  • torrent种子搜索引擎北京网站优化技术
  • 网站制作费用多少钱渭南中学校园网站建设工作汇报
  • 做网站开什么端口电子商务网站建设与维护试题
  • 优化站诊断网站开发协议
  • 资阳市网站seo连锁销售平台
  • 网站设计怎么自学学php网站开发好吗
  • 2022做网站还能赚钱吗南昌网站建设好企业网站
  • 湖南长沙网站建设公司电话企业网站的一般要素包括
  • 口碑好的网站建设公司怎么查百度收录
  • 响应式旅游网站模板中国建设银行官网个人网上银行登录
  • 怎么查网站找谁做的网站制作流程图