首页 文章 精选 留言 我的

精选列表

搜索[资源读取],共10011篇文章
优秀的个人博客,低调大师

C# 操作Excel图形——绘制、读取、隐藏、删除图形

简介 本篇文章将介绍C# 如何处理Excel图形相关的问题,包括以下内容要点: 1.绘制图形 1.1 绘制图形并添加文本到图形 1.2 添加图片到图形 1.3 设置图形阴影效果 2. 提取图形中的文本、图片 3. 设置图形的显示、隐藏 4. 删除图形 4.1删除指定图形 4.2 删除所有图形 所需工具 Free Spire.XLS for .NET 8.3 (社区版) PS: 下载安装该类库后,注意在项目程序中添加引用Spire.Xls.dll文件(dll文件可在安装路径下的Bin文件夹中获取) 注:Spire.xls能支持的图形种类很多,常见的Office Excel中的图形,这个类库也都能实现, 示例代码(供参考) 1. 绘制图形 【C#】 using System.Drawing; using Spire.Xls; using Spire.Xls.Core; namespace Add_shapes_to_Excel { class Program { static void Main(string[] args) { //创建实例 Workbook workbook = new Workbook(); //获取第一个工作表 Worksheet sheet = workbook.Worksheets[0]; //添加“太阳”形状的图形,并填充颜色 IPrstGeomShape Triangle = sheet.PrstGeomShapes.AddPrstGeomShape(2, 2, 170, 160, PrstGeomShapeType.Sun); Triangle.Fill.ForeColor = Color.Orange; Triangle.Fill.FillType = ShapeFillType.SolidColor; Triangle.Text = "IT'S A SUNNY DAY";//添加文本 //添加“禁止”标志的图形,并填充渐变颜色 IPrstGeomShape heart = sheet.PrstGeomShapes.AddPrstGeomShape(2, 7, 140, 140, PrstGeomShapeType.NoSmoking); heart.Fill.ForeColor = Color.Red; heart.Fill.FillType = ShapeFillType.Gradient; //添加云朵形状的图形 IPrstGeomShape Cloud = sheet.PrstGeomShapes.AddPrstGeomShape(15, 2, 160, 160, PrstGeomShapeType.Cloud); //设置图形阴影效果 Cloud.Shadow.Angle = 90; Cloud.Shadow.Distance = 10; Cloud.Shadow.Size = 100; Cloud.Shadow.Color = Color.SteelBlue; Cloud.Shadow.Blur = 30; Cloud.Shadow.Transparency = 1; Cloud.Shadow.HasCustomStyle = true; //添加五角星形状的图形,并加载图片来填充图形 IPrstGeomShape cloud = sheet.PrstGeomShapes.AddPrstGeomShape(15, 7, 160, 160, PrstGeomShapeType.Star5); cloud.Fill.CustomPicture(Image.FromFile("sm.png"), "sm.png"); cloud.Fill.FillType = ShapeFillType.Picture; //保存并打开文档 workbook.SaveToFile("AddShapes.xlsx", ExcelVersion.Version2013); System.Diagnostics.Process.Start("AddShapes.xlsx"); } } } 图形插入效果: 2.提取图形中的文本和图片 【C#】 using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Text; using Spire.Xls; using Spire.Xls.Core; namespace Extract_text_and_image_from_Excel_shape { class Program { static void Main(string[] args) { //创建实例,加载Excel工作表 Workbook workbook = new Workbook(); workbook.LoadFromFile("test.xlsx"); //获取第一个工作表 Worksheet sheet = workbook.Worksheets[0]; //提取指定形状中的文本内容,并将提取到的文本保存到指定文档 IPrstGeomShape shape1 = sheet.PrstGeomShapes[0]; string s = shape1.Text; StringBuilder sb = new StringBuilder(); sb.AppendLine(s); File.WriteAllText("ExtractText.txt", sb.ToString()); System.Diagnostics.Process.Start("ExtractText.txt"); //提取指定图形中的图片,并保存图片到指定文件 IPrstGeomShape shape2 = sheet.PrstGeomShapes[3]; Image image = shape2.Fill.Picture; image.Save("ShapeImage.png", ImageFormat.Png); System.Diagnostics.Process.Start("ShapeImage.png"); } } } 提取结果: 3. 设置图形的隐藏、显示 【C#】 using Spire.Xls; namespace HideShapes_XLS { class Program { static void Main(string[] args) { //创建实例,加载Excel文档 Workbook workbook = new Workbook(); workbook.LoadFromFile("test.xlsx"); //获取第一个工作表 Worksheet sheet = workbook.Worksheets[0]; //隐藏第3个图形 sheet.PrstGeomShapes[2].Visible = false; //显示图形 //sheet.PrstGeomShapes[1].Visible = true; //保存并打开文档 workbook.SaveToFile("HideShape.xlsx", ExcelVersion.Version2013); System.Diagnostics.Process.Start("HideShape.xlsx"); } } } 设置效果: 4. 删除Excel图形 【C#】 using Spire.Xls; namespace RemoveShapes_XLS { class Program { static void Main(string[] args) { //实例化Workbook类对象,加载Excel文件 Workbook workbook = new Workbook(); workbook.LoadFromFile("test.xlsx"); //获取第一个工作表 Worksheet sheet = workbook.Worksheets[0]; //删除第一个图形 sheet.PrstGeomShapes[0].Remove(); //删除所有图形 //for (int i = sheet.PrstGeomShapes.Count-1; i >= 0; i--) //{ // sheet.PrstGeomShapes[i].Remove(); //} //保存并打开文件 workbook.SaveToFile("DeleteShape.xlsx", ExcelVersion.Version2013); System.Diagnostics.Process.Start("DeleteShape.xlsx"); } } } 图形删除效果: 以上是关于“C#操作Excel中图形”的介绍,如需转载,请注明出处。

优秀的个人博客,低调大师

java使用javamail读取邮箱(收件箱为例)

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import javax.mail.BodyPart; import javax.mail.Flags; import javax.mail.Folder; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Part; import javax.mail.Session; import javax.mail.Store; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; /** *@authoryh * */ public class ShowMail{ private MimeMessagemimeMessage= null ; private StringsaveAttachPath= "" ; //附件下载后的存放目录 private StringBufferbodyText= new StringBuffer(); //存放邮件内容的StringBuffer对象 private StringdateFormat= "yy-MM-ddHH:mm" ; //默认的日前显示格式 /** *构造函数,初始化一个MimeMessage对象 */ public ShowMail(){ } public ShowMail(MimeMessagemimeMessage){ this .mimeMessage=mimeMessage; System.out.println( "创建一个ReceiveEmail对象...." ); } public void setMimeMessage(MimeMessagemimeMessage){ this .mimeMessage=mimeMessage; System.out.println( "设置一个MimeMessage对象..." ); } /** * * 获得发件人的地址和姓名 */ public StringgetFrom() throws Exception{ InternetAddressaddress[]=(InternetAddress[])mimeMessage.getFrom(); Stringfrom=address[ 0 ].getAddress(); if (from== null ){ from= "" ; System.out.println( "无法知道发送者." ); } Stringpersonal=address[ 0 ].getPersonal(); if (personal== null ){ personal= "" ; System.out.println( "无法知道发送者的姓名." ); } StringfromAddr= null ; if (personal!= null ||from!= null ){ fromAddr=personal+ "<" +from+ ">" ; System.out.println( "发送者是:" +fromAddr); } else { System.out.println( "无法获得发送者信息." ); } return fromAddr; } /** * * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同 * * "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址 */ public StringgetMailAddress(Stringtype) throws Exception{ StringmailAddr= "" ; StringaddType=type.toUpperCase(); InternetAddress[]address= null ; if (addType.equals( "TO" )||addType.equals( "CC" ) ||addType.equals( "BCC" )){ if (addType.equals( "TO" )){ address=(InternetAddress[])mimeMessage .getRecipients(Message.RecipientType.TO); } else if (addType.equals( "CC" )){ address=(InternetAddress[])mimeMessage .getRecipients(Message.RecipientType.CC); } else { address=(InternetAddress[])mimeMessage .getRecipients(Message.RecipientType.BCC); } if (address!= null ){ for ( int i= 0 ;i<address.length;i++){ StringemailAddr=address[i].getAddress(); if (emailAddr== null ){ emailAddr= "" ; } else { System.out.println( "转换之前的emailAddr:" +emailAddr); emailAddr=MimeUtility.decodeText(emailAddr); System.out.println( "转换之后的emailAddr:" +emailAddr); } Stringpersonal=address[i].getPersonal(); if (personal== null ){ personal= "" ; } else { System.out.println( "转换之前的personal:" +personal); personal=MimeUtility.decodeText(personal); System.out.println( "转换之后的personal:" +personal); } Stringcompositeto=personal+ "<" +emailAddr+ ">" ; System.out.println( "完整的邮件地址:" +compositeto); mailAddr+= "," +compositeto; } mailAddr=mailAddr.substring( 1 ); } } else { throw new Exception( "错误的电子邮件类型!" ); } return mailAddr; } /** * * 获得邮件主题 */ public StringgetSubject() throws MessagingException{ Stringsubject= "" ; try { System.out.println( "转换前的subject:" +mimeMessage.getSubject()); subject=MimeUtility.decodeText(mimeMessage.getSubject()); System.out.println( "转换后的subject:" +mimeMessage.getSubject()); if (subject== null ){ subject= "" ; } } catch (Exceptionexce){ exce.printStackTrace(); } return subject; } /** * * 获得邮件发送日期 */ public StringgetSentDate() throws Exception{ DatesentDate=mimeMessage.getSentDate(); System.out.println( "发送日期原始类型:" +dateFormat); SimpleDateFormatformat= new SimpleDateFormat(dateFormat); StringstrSentDate=format.format(sentDate); System.out.println( "发送日期可读类型:" +strSentDate); return strSentDate; } /** * * 获得邮件正文内容 */ public StringgetBodyText(){ return bodyText.toString(); } /** * * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 * * 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析 */ public void getMailContent(Partpart) throws Exception{ StringcontentType=part.getContentType(); //获得邮件的MimeType类型 System.out.println( "邮件的MimeType类型:" +contentType); int nameIndex=contentType.indexOf( "name" ); boolean conName= false ; if (nameIndex!=- 1 ){ conName= true ; } System.out.println( "邮件内容的类型: " +contentType); if (part.isMimeType( "text/plain" )&&conName== false ){ //text/plain类型 bodyText.append((String)part.getContent()); } else if (part.isMimeType( "text/html" )&&conName== false ){ //text/html类型 bodyText.append((String)part.getContent()); } else if (part.isMimeType( "multipart/*" )){ //multipart/* Multipartmultipart=(Multipart)part.getContent(); int counts=multipart.getCount(); for ( int i= 0 ;i<counts;i++){ getMailContent(multipart.getBodyPart(i)); } } else if (part.isMimeType( "message/rfc822" )){ //message/rfc822 getMailContent((Part)part.getContent()); } else { } } /** * * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false" */ public boolean getReplySign() throws MessagingException{ boolean replySign= false ; StringneedReply[]=mimeMessage .getHeader( "Disposition-Notification-To" ); if (needReply!= null ){ replySign= true ; } if (replySign){ System.out.println( "该邮件需要回复" ); } else { System.out.println( "该邮件不需要回复" ); } return replySign; } /** * 获得此邮件的Message-ID */ public StringgetMessageId() throws MessagingException{ StringmessageID=mimeMessage.getMessageID(); System.out.println( "邮件ID:" +messageID); return messageID; } /** *判断此邮件是否已读,如果未读返回false,反之返回true */ public boolean isNew() throws MessagingException{ boolean isNew= false ; Flagsflags=((Message)mimeMessage).getFlags(); Flags.Flag[]flag=flags.getSystemFlags(); System.out.println( "flags的长度: " +flag.length); for ( int i= 0 ;i<flag.length;i++){ if (flag[i]==Flags.Flag.SEEN){ isNew= true ; System.out.println( "seenemail..." ); //break; } } return isNew; } /** *判断此邮件是否包含附件 */ public boolean isContainAttach(Partpart) throws Exception{ boolean attachFlag= false ; //StringcontentType=part.getContentType(); if (part.isMimeType( "multipart/*" )){ Multipartmp=(Multipart)part.getContent(); for ( int i= 0 ;i<mp.getCount();i++){ BodyPartmPart=mp.getBodyPart(i); Stringdisposition=mPart.getDisposition(); if ((disposition!= null ) &&((disposition.equals(Part.ATTACHMENT))||(disposition .equals(Part.INLINE)))) attachFlag= true ; else if (mPart.isMimeType( "multipart/*" )){ attachFlag=isContainAttach((Part)mPart); } else { StringconType=mPart.getContentType(); if (conType.toLowerCase().indexOf( "application" )!=- 1 ) attachFlag= true ; if (conType.toLowerCase().indexOf( "name" )!=- 1 ) attachFlag= true ; } } } else if (part.isMimeType( "message/rfc822" )){ attachFlag=isContainAttach((Part)part.getContent()); } return attachFlag; } /** * * 保存附件 */ public void saveAttachMent(Partpart) throws Exception{ StringfileName= "" ; if (part.isMimeType( "multipart/*" )){ Multipartmp=(Multipart)part.getContent(); for ( int i= 0 ;i<mp.getCount();i++){ BodyPartmPart=mp.getBodyPart(i); Stringdisposition=mPart.getDisposition(); if ((disposition!= null ) &&((disposition.equals(Part.ATTACHMENT))||(disposition .equals(Part.INLINE)))){ fileName=mPart.getFileName(); if (fileName.toLowerCase().indexOf( "gb2312" )!=- 1 ){ fileName=MimeUtility.decodeText(fileName); } saveFile(fileName,mPart.getInputStream()); } else if (mPart.isMimeType( "multipart/*" )){ saveAttachMent(mPart); } else { fileName=mPart.getFileName(); if ((fileName!= null ) &&(fileName.toLowerCase().indexOf( "GB2312" )!=- 1 )){ fileName=MimeUtility.decodeText(fileName); saveFile(fileName,mPart.getInputStream()); } } } } else if (part.isMimeType( "message/rfc822" )){ saveAttachMent((Part)part.getContent()); } } /** * 设置附件存放路径 */ public void setAttachPath(StringattachPath){ this .saveAttachPath=attachPath; } /** * * 设置日期显示格式 */ public void setDateFormat(Stringformat) throws Exception{ this .dateFormat=format; } /** * * 获得附件存放路径 */ public StringgetAttachPath(){ return saveAttachPath; } /** * * 真正的保存附件到指定目录里 */ private void saveFile(StringfileName,InputStreamin) throws Exception{ StringosName=System.getProperty( "os.name" ); StringstoreDir=getAttachPath(); Stringseparator= "" ; if (osName== null ){ osName= "" ; } if (osName.toLowerCase().indexOf( "win" )!=- 1 ){ separator= "\\" ; if (storeDir== null ||storeDir.equals( "" )) storeDir= "c:\\tmp" ; } else { separator= "/" ; storeDir= "/tmp" ; } FilestoreFile= new File(storeDir+separator+fileName); System.out.println( "附件的保存地址: " +storeFile.toString()); //for(int i=0;storefile.exists();i++){ //storefile = new File(storedir+separator+fileName+i); //} BufferedOutputStreambos= null ; BufferedInputStreambis= null ; try { bos= new BufferedOutputStream( new FileOutputStream(storeFile)); bis= new BufferedInputStream(in); int c; while ((c=bis.read())!=- 1 ){ bos.write(c); bos.flush(); } } catch (Exceptionexception){ exception.printStackTrace(); throw new Exception( "文件保存失败!" ); } finally { bos.close(); bis.close(); } } /** * ReceiveEmail类测试 */ public static void main(Stringargs[]) throws Exception{ Stringhost= "pop.sina.com" ; Stringusername= "***" ; Stringpassword= "***" ; Propertiesprops= new Properties(); Sessionsession=Session.getDefaultInstance(props, null ); Storestore=session.getStore( "pop3" ); store.connect(host,username,password); Folderfolder=store.getFolder( "INBOX" ); folder.open(Folder.READ_ONLY); Messagemessage[]=folder.getMessages(); System.out.println( "邮件数量: " +message.length); ShowMailre= null ; for ( int i= 0 ;i<message.length;i++){ re= new ShowMail((MimeMessage)message[i]); System.out.println( "邮件 " +i+ " 主题: " +re.getSubject()); System.out.println( "邮件 " +i+ " 发送时间: " +re.getSentDate()); System.out.println( "邮件 " +i+ " 是否需要回复: " +re.getReplySign()); System.out.println( "邮件 " +i+ " 是否已读: " +re.isNew()); System.out.println( "邮件 " +i+ " 是否包含附件: " +re.isContainAttach((Part)message[i])); System.out.println( "邮件 " +i+ " 发送人地址: " +re.getFrom()); System.out .println( "邮件 " +i+ " 收信人地址: " +re.getMailAddress( "to" )); System.out.println( "邮件 " +i+ " 抄送: " +re.getMailAddress( "cc" )); System.out.println( "邮件 " +i+ " 暗抄: " +re.getMailAddress( "bcc" )); re.setDateFormat( "yy年MM月dd日 HH:mm" ); System.out.println( "邮件 " +i+ " 发送时间: " +re.getSentDate()); System.out.println( "邮件 " +i+ " 邮件ID: " +re.getMessageId()); re.getMailContent((Part)message[i]); System.out.println( "邮件 " +i+ " 正文内容: \r\n" +re.getBodyText()); re.setAttachPath( "e:\\" ); re.saveAttachMent((Part)message[i]); } } }

优秀的个人博客,低调大师

doT.js变量和数组混合读取方式

可以包裹任意大小的html 变量在其包裹的任意区域都有效 单个变量可以和数组分开展示 最好放置在最下方执行js 数据结构 var data = { "id": "1280", "name": "漂亮的衣服", "price": "100", "oprice": "150", "goods_img": [ "http://image.diandodo.com/zhudianbao/Uploads/User/u1250000189/20160718/a/578c97464f436.jpg@1000w", "http://image.diandodo.com/zhudianbao/Uploads/User/u1250000189/20160718/d/578c973b1fa40.jpg@1000w", "http://image.diandodo.com/zhudianbao/Uploads/User/u1250000189/20160718/6/578c973352e0f.jpg@1000w" ] }; 区域div <div id="info_area"></div> 包裹区域 <script id="goodstmpl" type="text/x-dot-template"> ... </script> 单个变量使用 <div class="aui-title">{{= it.name}}</div> 变量中数组使用 方式1 {{ for(var prop in it['goods_img']) { }} <div class="swiper-slide li"> <a href="javascript:;"> <img src="{{= it['goods_img'][prop] }}" data-img="{{= it['goods_img'][prop] }}"> </a> </div> {{ } }} 方式2 {{~ it.goods_img:v}} <div class="swiper-slide li"> <a href="javascript:;"> <img src="{{= v }}" data-img="{{= v }}"> </a> </div> {{~}} 方式3 {{ for(var prop in it['goods_img']) { }} {{ var v = it['goods_img'][prop]; }} <div class="swiper-slide li"> <a href="javascript:;"> <img src="{{= v }}" data-img="{{= v }}"> </a> </div> {{ } }} JS处理 var interText = doT.template($("#goodstmpl").text()); $("#info_area").html(interText(data)); 本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5949852.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册