热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用ApachePOI操作Excel文件如何对一个单元格加注解?

有的时候,我们需要通过操作ApachePOI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的。那么对于这种情况,我们的代码应该如何写呢?

有的时候,我们需要通过操作Apache POI,在生成Cell数据的同时,能对其生成的Cell,加上注解(comments),类似于下面的。

技术分享

那么对于这种情况,我们的代码应该如何写呢? 借花献佛,我就用Apache POI官方提供的例子,然后加上一些注解,给大家看一下。本例子的测试代码是基于POI-3.12的。

执行完后,将会生成上图所示的Excel工作表单(sheet)

[java] view plain copy
 
  1. import org.apache.poi.ss.usermodel.*;  
  2. import org.apache.poi.xssf.usermodel.XSSFSheet;  
  3. import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
  4. import java.io.IOException;  
  5. import java.io.FileOutputStream;  
  6.   
  7. /** 
  8.  * Demonstrates how to work with excel cell comments. 
  9.  * 

     

  10.  * Excel comment is a kind of a text shape, 
  11.  * so inserting a comment is very similar to placing a text box in a worksheet 
  12.  * 

     
  13.  * 
  14.  * @author Yegor Kozlov 
  15.  */  
  16. public class CellComments {  
  17.     public static void main(String[] args) throws IOException {  
  18.         //1.创建一个工作簿对象  
  19.         XSSFWorkbook wb = new XSSFWorkbook();  
  20.   
  21.         //2.得到一个POI的工具类  
  22.         CreationHelper factory = wb.getCreationHelper();  
  23.   
  24.         //3. 创建一个工作表  
  25.         XSSFSheet sheet = wb.createSheet();  
  26.           
  27.         //4.得到一个换图的对象  
  28.         Drawing drawing = sheet.createDrawingPatriarch();  
  29.         //5. ClientAnchor是附属在WorkSheet上的一个对象,  其固定在一个单元格的左上角和右下角.  
  30.         ClientAnchor anchor = factory.createClientAnchor();  
  31.           
  32.         //6. 创建一个单元格(2A单元格)  
  33.         Cell cell0 = sheet.createRow(1).createCell(0);  
  34.         //6.1. 对这个单元格设置值  
  35.         cell0.setCellValue("Test");  
  36.         //6.2. 对这个单元格加上注解  
  37.         Comment comment0 = drawing.createCellComment(anchor);  
  38.         RichTextString str0 = factory.createRichTextString("Hello, World!");  
  39.         comment0.setString(str0);  
  40.         comment0.setAuthor("Apache POI");  
  41.         cell0.setCellComment(comment0);  
  42.           
  43.         //7. 创建一个单元格(4F单元格)  
  44.         Cell cell1 = sheet.createRow(3).createCell(5);  
  45.         //7.1. 对这个单元格设置值  
  46.         cell1.setCellValue("F4");  
  47.         //7.2. 对这个单元格加上注解  
  48.         Comment comment1 = drawing.createCellComment(anchor);  
  49.         RichTextString str1 = factory.createRichTextString("Hello, World!");  
  50.         comment1.setString(str1);  
  51.         comment1.setAuthor("Apache POI");  
  52.         cell1.setCellComment(comment1);  
  53.   
  54.         //8. 创建一个单元格(4F单元格)  
  55.         Cell cell2 = sheet.createRow(2).createCell(2);  
  56.         cell2.setCellValue("C3");  
  57.   
  58.         Comment comment2 = drawing.createCellComment(anchor);  
  59.         RichTextString str2 = factory.createRichTextString("XSSF can set cell comments");  
  60.         //9。为注解设置字体  
  61.         Font font = wb.createFont();  
  62.         font.setFontName("Arial");  
  63.         font.setFontHeightInPoints((short)14);  
  64.         font.setBoldweight(Font.BOLDWEIGHT_BOLD);  
  65.         font.setColor(IndexedColors.RED.getIndex());  
  66.         str2.applyFont(font);  
  67.   
  68.         comment2.setString(str2);  
  69.         comment2.setAuthor("Apache POI");  
  70.         comment2.setColumn(2);  
  71.         comment2.setRow(2);  
  72.         //10. 保存成Excel文件  
  73.         String fname = "comments.xlsx";  
  74.         FileOutputStream out = new FileOutputStream(fname);  
  75.         wb.write(out);  
  76.         out.close();  
  77.   
  78.     }  
  79. }  

如何用Apache POI操作Excel文件-----如何对一个单元格加注解?


推荐阅读
  • 深入解析 OpenCV 2 中 Mat 对象的类型、深度与步长属性
    在OpenCV 2中,`Mat`类作为核心组件,对于图像处理至关重要。本文将深入探讨`Mat`对象的类型、深度与步长属性,这些属性是理解和优化图像操作的基础。通过具体示例,我们将展示如何利用这些属性实现高效的图像缩小功能。此外,还将讨论这些属性在实际应用中的重要性和常见误区,帮助读者更好地掌握`Mat`类的使用方法。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • 在ASP.NET MVC项目中,通过实战解决了Ajax请求500错误及多表数据查询的问题。具体而言,将页面分为两个部分,用户点击右侧导航栏时,通过Ajax请求动态加载数据,并在右侧显示相应的页面内容。最初尝试使用Partial Action方法,但遇到了500错误。通过详细排查和调试,最终成功解决了这一问题,并实现了预期功能。此外,还优化了多表数据查询的性能,确保系统的高效运行。 ... [详细]
  • 在第六章中,我们将深入探讨MySQL中的多表查询技术,包括联结查询和子查询。联结查询通过将两个或多个表进行连接,基于连接条件生成结果集。常见的联结类型有内联结、外联结和全外联结。交叉联结(CROSS JOIN)虽然使用较少,但其原理是生成所有可能的组合,类似于笛卡尔积的概念。此外,子查询则是在一个查询语句中嵌套另一个查询,用于获取更复杂的数据集。本章将通过实例详细讲解这些查询方法的应用和优化技巧。 ... [详细]
  • 本文深入探讨了 iOS 开发中 `int`、`NSInteger`、`NSUInteger` 和 `NSNumber` 的应用与区别。首先,我们将详细介绍 `NSNumber` 类型,该类用于封装基本数据类型,如整数、浮点数等,使其能够在 Objective-C 的集合类中使用。通过分析这些类型的特性和应用场景,帮助开发者更好地理解和选择合适的数据类型,提高代码的健壮性和可维护性。苹果官方文档提供了更多详细信息,可供进一步参考。 ... [详细]
  • 解决基于XML配置的MyBatis在Spring整合中出现“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”问题的方法
    在将Spring与MyBatis进行整合时,作者遇到了“无效绑定语句(未找到):com.music.dao.MusicDao.findAll”的问题。该问题主要出现在使用XML文件配置DAO层的情况下,而注解方式配置则未出现类似问题。作者详细分析了两个配置文件之间的差异,并最终找到了解决方案。本文将详细介绍问题的原因及解决方法,帮助读者避免类似问题的发生。 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 本文深入解析了 Apache 配置文件 `httpd.conf` 和 `.htaccess` 的优化方法,探讨了如何通过合理配置提升服务器性能和安全性。文章详细介绍了这两个文件的关键参数及其作用,并提供了实际应用中的最佳实践,帮助读者更好地理解和运用 Apache 配置。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 通过自定义 `TextView`,实现了在用户点击或焦点变化时动态调整字体颜色的效果。该方法利用了 `ColorStateList` 和 `Selector` 资源文件,确保了界面交互的流畅性和视觉效果的提升。具体实现中,通过重写 `onTouchEvent` 和 `onFocusChanged` 方法,精确控制了颜色变化的时机和状态。此外,还对性能进行了优化,确保在高频率操作下依然保持高效响应。 ... [详细]
  • 尽管许多人认为跑步是一项简单的运动,但实际上它涉及诸多专业知识。不正确的跑步方式不仅会降低锻炼效果,还可能引发伤害。例如,穿着不合脚或过于陈旧的跑鞋,会导致足部支撑不足,增加受伤风险。此外,跑步姿势不当、热身不足、过度训练等问题也同样值得关注。本文将详细介绍七大常见跑步误区,并提供专业的改进建议,帮助跑者避免这些问题,提高运动效率和安全性。 ... [详细]
  • 在 HihoCoder 1505 中,题目要求从给定的 n 个数中选取两对数,使这两对数的和相等。如果直接对所有可能的组合进行遍历,时间复杂度将达到 O(n^4),因此需要考虑优化选择过程。通过使用哈希表或其他高效的数据结构,可以显著降低时间复杂度,从而提高算法的效率。具体实现中,可以通过预处理和存储中间结果来减少重复计算,进一步提升性能。 ... [详细]
  • 在探讨如何高效处理大规模数据报表的分页展示之前,首先需要明确导致报表加载缓慢的主要原因。通常情况下,这主要是由于两个方面:一是查询条件过于宽泛,使得数据库返回的结果集包含数百万甚至更多的记录;二是前端渲染性能不足,无法高效处理大量数据。为了优化这一过程,可以从以下几个方面入手:优化查询条件,减少不必要的数据返回;采用分页查询技术,每次仅加载所需的数据;利用缓存机制,减少对数据库的频繁访问;提升前端渲染效率,使用虚拟滚动等技术提高用户体验。 ... [详细]
  • 本文深入探讨了原型模式在软件设计中的应用与实现。原型模式通过使用已有的实例作为原型来创建新对象,而不是直接通过类实例化。这种方式不仅简化了对象的创建过程,还提高了系统的灵活性和效率。具体来说,原型模式涉及一个支持克隆功能的接口或基类,子类通过实现该接口来提供具体的克隆方法,从而实现对象的快速复制。此外,文章还详细分析了原型模式的优缺点及其在实际项目中的应用场景,为开发者提供了实用的指导和建议。 ... [详细]
  • 新年伊始,正是学习的最佳时机。本文全面解析了CK1957-Zookeeper的核心概念与实践技巧,旨在帮助初学者快速掌握这一深度学习工具。通过详细的理论讲解和实际操作示例,读者可以更好地理解Zookeeper的工作原理及其在分布式系统中的应用。无论是新手还是有一定基础的学习者,都能从中受益匪浅。 ... [详细]
author-avatar
手浪用户2502941303
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有