热门标签 | 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



推荐阅读
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • andr ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
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;"