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



推荐阅读
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
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;"