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

Java读取Excel在HTML中显示

为什么80%的码农都做不了架构师?packageutil;importjava.io.FileInputStream;importjava.io.FileNot

为什么80%的码农都做不了架构师?>>>   hot3.png

package util;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;


import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.util.CellRangeAddress;


import soja.base.SojaProperties;
import soja.transfer.DataErrorException;
import mvc.datamgr.DataManager;
/**
 * @author lixunhui@qq.com
 **/
public class ExcelShower extends DataManager {


/**
* SID.
*/
private static final long serialVersionUID = -8344971443770122206L;


/**
* 读取 Excel 显示页面.
* @param properties
* @return
* @throws Exception
*/
public StringBuffer read(Map properties) throws Exception {
HSSFSheet sheet = null;
StringBuffer lsb = new StringBuffer();
String excelFileName = SojaProperties.getSojaRoot() + "/page/readExcel/sale.xls";
try {
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(excelFileName)); // 获整个Excel


for (int sheetIndex = 0; sheetIndex sheet = workbook.getSheetAt(sheetIndex);// 获所有的sheet
String sheetName = workbook.getSheetName(sheetIndex); // sheetName
if (workbook.getSheetAt(sheetIndex) != null) {
sheet = workbook.getSheetAt(sheetIndex);// 获得不为空的这个sheet
if (sheet != null) {
int firstRowNum = sheet.getFirstRowNum(); // 第一行
int lastRowNum = sheet.getLastRowNum(); // 最后一行
// 构造Table
lsb.append("");
for (int rowNum &#61; firstRowNum; rowNum <&#61; lastRowNum; rowNum&#43;&#43;) {
if (sheet.getRow(rowNum) !&#61; null) {// 如果行不为空&#xff0c;
HSSFRow row &#61; sheet.getRow(rowNum);
short firstCellNum &#61; row.getFirstCellNum(); // 该行的第一个单元格
short lastCellNum &#61; row.getLastCellNum(); // 该行的最后一个单元格
int height &#61; (int) (row.getHeight()/15.625); // 行的高度
lsb.append("");
for (short cellNum &#61; firstCellNum; cellNum <&#61; lastCellNum; cellNum&#43;&#43;) { // 循环该行的每一个单元格
HSSFCell cell &#61; row.getCell(cellNum);
if (cell !&#61; null) {
if (cell.getCellType() &#61;&#61; HSSFCell.CELL_TYPE_BLANK) {
continue;
}else {
StringBuffer tdStyle &#61;new StringBuffer("");
}
}
}
lsb.append("");
}
}
}
}
}
} catch (FileNotFoundException e) {
throw new DataErrorException("文件 " &#43; excelFileName &#43; " 没有找到!");
} catch (IOException e) {
throw new DataErrorException("文件 " &#43; excelFileName &#43; " 处理错误("
&#43; e.getMessage() &#43; ")!");
}
return lsb;
}




/**
* 取得单元格的值
* &#64;param cell
* &#64;return
* &#64;throws IOException
*/
private static Object getCellValue(HSSFCell cell) throws IOException {
Object value &#61; "";
if (cell.getCellType() &#61;&#61; HSSFCell.CELL_TYPE_STRING) {
value &#61; cell.getRichStringCellValue().toString();
} else if (cell.getCellType() &#61;&#61; HSSFCell.CELL_TYPE_NUMERIC) {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date &#61; cell.getDateCellValue();
SimpleDateFormat sdf &#61; new SimpleDateFormat("yyyy-MM-dd");
value &#61; sdf.format(date);
} else {
double value_temp &#61; (double) cell.getNumericCellValue();
BigDecimal bd &#61; new BigDecimal(value_temp);
BigDecimal bd1 &#61; bd.setScale(3, bd.ROUND_HALF_UP);
value &#61; bd1.doubleValue();

/*
DecimalFormat format &#61; new DecimalFormat("#0.###");
value &#61; format.format(cell.getNumericCellValue());
*/
}
}
if (cell.getCellType() &#61;&#61; HSSFCell.CELL_TYPE_BLANK) {
value &#61; "";
}
return value;
}

/**
* 判断单元格在不在合并单元格范围内&#xff0c;如果是&#xff0c;获取其合并的列数。
* &#64;param sheet 工作表
* &#64;param cellRow 被判断的单元格的行号
* &#64;param cellCol 被判断的单元格的列号
* &#64;return
* &#64;throws IOException
*/
private static int getMergerCellRegionCol(HSSFSheet sheet, int cellRow,int cellCol) throws IOException {
int retVal &#61; 0;
int sheetMergerCount &#61; sheet.getNumMergedRegions();
for (int i &#61; 0; i CellRangeAddress cra &#61; (CellRangeAddress) sheet.getMergedRegion(i);
int firstRow &#61; cra.getFirstRow();  // 合并单元格CELL起始行
int firstCol &#61; cra.getFirstColumn(); // 合并单元格CELL起始列
int lastRow &#61; cra.getLastRow(); // 合并单元格CELL结束行
int lastCol &#61; cra.getLastColumn(); // 合并单元格CELL结束列
if (cellRow >&#61; firstRow && cellRow <&#61; lastRow) { // 判断该单元格是否是在合并单元格中
if (cellCol >&#61; firstCol && cellCol <&#61; lastCol) {
retVal &#61; lastCol - firstCol&#43;1; // 得到合并的列数
break;
}
}
}
return retVal;
}

/**
* 判断单元格是否是合并的单格&#xff0c;如果是&#xff0c;获取其合并的行数。
* &#64;param sheet 表单
* &#64;param cellRow 被判断的单元格的行号
* &#64;param cellCol 被判断的单元格的列号 
* &#64;return
* &#64;throws IOException
*/
private static int getMergerCellRegionRow(HSSFSheet sheet, int cellRow,int cellCol) throws IOException {
int retVal &#61; 0;
int sheetMergerCount &#61; sheet.getNumMergedRegions();
for (int i &#61; 0; i CellRangeAddress cra &#61; (CellRangeAddress) sheet.getMergedRegion(i);
int firstRow &#61; cra.getFirstRow();  // 合并单元格CELL起始行
int firstCol &#61; cra.getFirstColumn(); // 合并单元格CELL起始列
int lastRow &#61; cra.getLastRow(); // 合并单元格CELL结束行
int lastCol &#61; cra.getLastColumn(); // 合并单元格CELL结束列
if (cellRow >&#61; firstRow && cellRow <&#61; lastRow) { // 判断该单元格是否是在合并单元格中
if (cellCol >&#61; firstCol && cellCol <&#61; lastCol) {
retVal &#61; lastRow - firstRow &#43; 1; // 得到合并的行数
break;
}
}
}
return retVal;
}

/**
* 单元格背景色转换
* &#64;param hc
* &#64;return
*/
private String convertToStardColor(HSSFColor hc) {
StringBuffer sb &#61; new StringBuffer("");
if (hc !&#61; null) {
int a &#61; HSSFColor.AUTOMATIC.index;
int b &#61; hc.getIndex();
if (a &#61;&#61; b) {
return null;
}
sb.append("#");
for (int i &#61; 0; i String str ;
String str_tmp &#61; Integer.toHexString(hc.getTriplet()[i]);
if (str_tmp !&#61; null && str_tmp.length() <2) {
str &#61; "0" &#43; str_tmp;
}else {
str &#61; str_tmp;
}
sb.append(str);
}
}
return sb.toString();
}

/**
* 单元格小平对齐
* &#64;param alignment
* &#64;return
*/
private String convertAlignToHtml(short alignment) {
String align &#61; "left";
switch (alignment) {
case HSSFCellStyle.ALIGN_LEFT:
align &#61; "left";
break;
case HSSFCellStyle.ALIGN_CENTER:
align &#61; "center";
break;
case HSSFCellStyle.ALIGN_RIGHT:
align &#61; "right";
break;
default:
break;
}
return align;
}

/**
* 单元格垂直对齐
* &#64;param verticalAlignment
* &#64;return
*/
private String convertVerticalAlignToHtml(short verticalAlignment) {
String valign &#61; "middle";
switch (verticalAlignment) {
case HSSFCellStyle.VERTICAL_BOTTOM:
valign &#61; "bottom";
break;
case HSSFCellStyle.VERTICAL_CENTER:
valign &#61; "center";
break;
case HSSFCellStyle.VERTICAL_TOP:
valign &#61; "top";
break;
default:
break;
}
return valign;
}

}


转:https://my.oschina.net/huiger/blog/89581



推荐阅读
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 动态壁纸 LiveWallPaper:让您的桌面栩栩如生(第二篇)
    在本文中,我们将继续探讨如何开发动态壁纸 LiveWallPaper,使您的桌面更加生动有趣。作为 2010 年 Google 暑期大学生博客分享大赛 Android 篇的一部分,我们将详细介绍 Ed Burnette 的《Hello, Android》第三版中的相关内容,并分享一些实用的开发技巧和经验。通过本篇文章,您将了解到如何利用 Android SDK 创建引人入胜的动态壁纸,提升用户体验。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 本文介绍了如何利用Apache POI库高效读取Excel文件中的数据。通过实际测试,除了分数被转换为小数存储外,其他数据均能正确读取。若在使用过程中发现任何问题,请及时留言反馈,以便我们进行更新和改进。 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • iOS开发中MVC架构模式的深入解析(第一部分)
    在iOS开发中,MVC架构模式是常用的设计模式之一。本文将深入解析MVC架构的第一部分,重点介绍View组件。View组件继承自UIView,主要负责内容的展示(如UILabel等视图类)和用户输入的处理(如UIButton等控件类)。通过详细的代码示例和实际应用,帮助开发者更好地理解和掌握View在MVC架构中的作用和实现方式。 ... [详细]
  • 本文探讨了在Python中使用序列号字符串进行高效模式替换的方法。具体而言,通过将HTML标签中的`&`替换为`{n}`,并生成形如`[tag, {n}]`的哈希原始字符串。示例字符串为:“这是一个字符串。这是另一部分。”该方法能够有效提升替换操作的性能和可读性。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 本文详细探讨了MySQL数据库实例化参数的优化方法及其在实例查询中的应用。通过具体的源代码示例,介绍了如何高效地配置和查询MySQL实例,为开发者提供了有价值的参考和实践指导。 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
  • 探索聚类分析中的K-Means与DBSCAN算法及其应用
    聚类分析是一种用于解决样本或特征分类问题的统计分析方法,也是数据挖掘领域的重要算法之一。本文主要探讨了K-Means和DBSCAN两种聚类算法的原理及其应用场景。K-Means算法通过迭代优化簇中心来实现数据点的划分,适用于球形分布的数据集;而DBSCAN算法则基于密度进行聚类,能够有效识别任意形状的簇,并且对噪声数据具有较好的鲁棒性。通过对这两种算法的对比分析,本文旨在为实际应用中选择合适的聚类方法提供参考。 ... [详细]
author-avatar
丫头2502892725
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有
     
HSSFCellStyle cellStyle &#61; cell.getCellStyle();
HSSFPalette palette &#61; workbook.getCustomPalette(); //类HSSFPalette用于求颜色的国际标准形式
HSSFColor hColor &#61; palette.getColor(cellStyle.getFillForegroundColor());
HSSFColor hColor2 &#61; palette.getColor(cellStyle.getFont(workbook).getColor());

String bgColor &#61; convertToStardColor(hColor);//背景颜色
short boldWeight &#61; cellStyle.getFont(workbook).getBoldweight(); // 字体粗细
short fontHeight &#61; (short) (cellStyle.getFont(workbook).getFontHeight() / 2); // 字体大小
String fontColor &#61; convertToStardColor(hColor2); // 字体颜色
if(bgColor !&#61; null && !"".equals(bgColor.trim())){
tdStyle.append(" background-color:" &#43; bgColor &#43; "; ");
}
if(fontColor !&#61; null && !"".equals(fontColor.trim())) {
tdStyle.append(" color:" &#43; fontColor &#43; "; ");
}
tdStyle.append(" font-weight:" &#43; boldWeight &#43; "; ");
tdStyle.append(" font-size: " &#43; fontHeight &#43; "%;"); 
lsb.append(tdStyle &#43; "\"");

int width &#61; (int) (sheet.getColumnWidth(cellNum)/ 35.7); // 
int cellReginCol &#61; getMergerCellRegionCol(sheet,rowNum, cellNum); // 合并的列&#xff08;solspan&#xff09;
int cellReginRow &#61; getMergerCellRegionRow(sheet, rowNum, cellNum);// 合并的行&#xff08;rowspan&#xff09;
String align &#61; convertAlignToHtml(cellStyle.getAlignment()); // 
String vAlign &#61; convertVerticalAlignToHtml(cellStyle.getVerticalAlignment());
   
lsb.append(" align&#61;\"" &#43; align &#43; "\" valign&#61;\""&#43;vAlign&#43;"\" width&#61;\"" &#43; width &#43; "\" ");
lsb.append(" colspan&#61;\"" &#43; cellReginCol &#43; "\" rowspan&#61;\""&#43;cellReginRow&#43;"\"");
lsb.append(">"&#43;getCellValue(cell)&#43;"