- 浏览: 96544 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zyq873002362:
很不错的资源
DB2 SQLCODE 大全 -
tsl2122342:
能提供详细的解决办法吗?我正好遇到了这个问题,不想换解析器了, ...
Sax 解析xml文件时, 数据信息不完整问题解决方法 -
hw1287789687:
怎么读取合并单元格中的内容呢?
使用JXL 读取Excel合并单元格方法 -
padangel:
狠不错,给我一些启发了
使用POI对Office Excel 97-2003 版本以及2007版进行基本的读取操作 -
yu165683:
thank you very much!
使用JXL 读取Excel合并单元格方法
1、index.jsp页面
<body>
<form action="excel_view.jsp" method="post">
<input type="file" name="filepath">
<input type="submit" name="submit" value="提交">
</form>
</body>
----------------------------------------------------------------------
2、excel_view.jsp页面
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import="java.io.*" %>
<%@ page import="jxl.Cell"%>
<%@ page import="jxl.CellType"%>
<%@ page import="jxl.Sheet"%>
<%@ page import="jxl.Workbook"%>
<%@ page import="jxl.read.biff.BiffException"%>
<%@ page import="com.method.CellStyle" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>查看excel文件</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
try {
InputStream is = new FileInputStream(request.getParameter("filepath"));
Workbook read_workbook = Workbook.getWorkbook(is);
Sheet sheet = read_workbook.getSheet(0);
CellStyle cell_style = new CellStyle();
int rows = sheet.getRows();
int columns = sheet.getColumns();
int rowspan = 0;
int colspan = 0;
out.print("<table border='1' cellpadding='0' cellspacing='0' style='font-size: 12px;border-collapse:collapse' bordercolor='#000000'>");
for (int i = 0; i < rows; i++) {
out.print("<tr>");
for (int j = 0; j < columns ; j++) {
Cell cell = sheet.getCell(j, i);
cell_style.ReadRange(sheet,i,j);
rowspan = cell_style.getRowspan();
colspan = cell_style.getColspan();
String contents = null;
if(cell.getType() == CellType.EMPTY){
cell_style.setBetweenRowColumn(i,j);
int min_row = cell_style.getMin_row();
int max_row = cell_style.getMax_row();
int min_col = cell_style.getMin_column();
int max_col = cell_style.getMax_column();
if( min_row < i && i <= max_row && min_col <= j && j<= max_col){
j = max_col;
continue;
}
contents = " ";
out.print("<td width='"+(40*colspan)+"' rowspan='"+rowspan+"' colspan='"+colspan+"'>"+contents+"</td>");
j += colspan-1;
continue;
} else {
contents = cell.getContents();
out.print("<td align='center'"
+"rowspan='"+rowspan+"'"
+"colspan='"+colspan+"'"
+"bGcolor='"+cell_style.getBgcolor(cell)+"'"
//+" height='"+sheet.getSettings().getDefaultRowHeight()+"'"
+"height='25'"
+" width='"+(60*colspan)+"'>"
+"<Font color='"+cell_style.getFontColor(cell)+"'"
//+"size='"+cell.getCellFormat().getFont().getPointSize()+"'"
+"face='"+cell.getCellFormat().getFont().getName()+"'"
+">"+contents+"</Font></td>");
j += colspan-1;
continue;
}
}
out.print("</tr>");
}
read_workbook.close();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
%>
</body>
</html>
----------------------------------------------------------------------
3、CellStyle.java
package com.method;
import jxl.Cell;
import jxl.Range;
import jxl.Sheet;
/**
* 获取Excel 里被合并单元格的样式
* @author JinYunHe
*
*/
public class CellStyle {
private int topleft_row ; //起始行
private int topleft_column; //起始列
private int bottomright_row = 0; //终止行
private int bottomright_column = 0; //终止列
private int rowspan = 1; //行
private int colspan = 1; //列
private Range[] ranges = null; //合并单元格集合
private int min_row ; //最小行
private int max_row ; //最大行
private int min_column; //最小列
private int max_column; //最大列
/**
* 获取本sheet里合并单元格的集合
* @param sheet
*/
public void ReadRange(Sheet sheet,int row,int column){
ranges = sheet.getMergedCells();
for(Range space:ranges){
//System.out.print(space.getTopLeft().getRow()+"行,");
//System.out.print(space.getTopLeft().getColumn()+"列\t");
//System.out.print(space.getBottomRight().getRow()+"行,");
//System.out.print(space.getBottomRight().getColumn()+"列\n");
//System.out.println("\n-------------------------");
///*
this.topleft_row = space.getTopLeft().getRow();
this.topleft_column = space.getTopLeft().getColumn();
if(row != topleft_row || column != topleft_column){
this.setRowspan(1);
this.setColspan(1);
}
if(row == topleft_row && column == topleft_column){
this.setTopleft_row(this.topleft_row);
this.setTopleft_column(this.topleft_column);
this.setBottomright_row(space.getBottomRight().getRow());
this.setBottomright_column(space.getBottomRight().getColumn());
this.setRowspan(2);
this.setColspan(2);
break;
}
//*/
}
//System.out.println("xxxxxxxxxxxxxxxxxxxxxxxxxx");
}
/**
*
* @return
*/
public void setBetweenRowColumn(int row ,int column){
for(Range space:ranges){
//获取行的范围
int min_row = space.getTopLeft().getRow(); // min row
int max_row = space.getBottomRight().getRow(); // max row
int min_column = space.getTopLeft().getColumn(); // min column
int max_column = space.getBottomRight().getColumn(); // max column
if(min_row <= row
&& row <= max_row){
//获取列的范围
if(min_column <= column
&& column <= max_column){
this.setMin_row(min_row); // min row
this.setMax_row(max_row); // max row
this.setMin_column(min_column); // min column
this.setMax_column(max_column); // max column
break;
}
}
}
}
/**
* 获取背景颜色的值
* @param cell: 当前单元格
* @return
*/
public String getBgcolor(Cell cell){
int r = cell.getCellFormat().getBackgroundColour().getDefaultRGB().getRed();
int g = cell.getCellFormat().getBackgroundColour().getDefaultRGB().getGreen();
int b = cell.getCellFormat().getBackgroundColour().getDefaultRGB().getBlue();
return "#"+Integer.toHexString(r<<16|g<<8|b);
}
/**
* 获取字体的颜色
* @param cell: 当前单元格
* @return
*/
public String getFontColor(Cell cell){
int r = cell.getCellFormat().getFont().getColour().getDefaultRGB().getRed();
int g = cell.getCellFormat().getFont().getColour().getDefaultRGB().getGreen();
int b = cell.getCellFormat().getFont().getColour().getDefaultRGB().getBlue();
return "#"+Integer.toHexString(r<<16|g<<8|b);
}
public int getTopleft_row() {
return topleft_row;
}
public void setTopleft_row(int topleft_row) {
this.topleft_row = topleft_row;
}
public int getTopleft_column() {
return topleft_column;
}
public void setTopleft_column(int topleft_column) {
this.topleft_column = topleft_column;
}
public int getBottomright_row() {
return bottomright_row;
}
public void setBottomright_row(int bottomright_row) {
this.bottomright_row = bottomright_row;
}
public int getBottomright_column() {
return bottomright_column;
}
public void setBottomright_column(int bottomright_column) {
this.bottomright_column = bottomright_column;
}
public int getRowspan() {
return rowspan;
}
public void setRowspan(int rowspan) {
// rowspan :1 表示无; 2 表示有;
if(rowspan == 1){
this.rowspan = 1;
}
if(rowspan == 2){
this.rowspan = this.getBottomright_row() - this.getTopleft_row() +1;
}
}
public int getColspan() {
return colspan;
}
public void setColspan(int colspan) {
// colspan :1 表示无; 2 表示有;
if(colspan == 1){
this.colspan = 1;
}
if(colspan == 2){
this.colspan = this.getBottomright_column() - this.getTopleft_column() +1;
}
}
//------------------------获取所合并的单元格的的所表示范围的行和列-----------
public Range[] getRanges() {
return ranges;
}
public void setRanges(Range[] ranges) {
this.ranges = ranges;
}
public int getMin_row() {
return min_row;
}
public void setMin_row(int min_row) {
this.min_row = min_row;
}
public int getMax_row() {
return max_row;
}
public void setMax_row(int max_row) {
this.max_row = max_row;
}
public int getMin_column() {
return min_column;
}
public void setMin_column(int min_column) {
this.min_column = min_column;
}
public int getMax_column() {
return max_column;
}
public void setMax_column(int max_column) {
this.max_column = max_column;
}
}
注: 这个例子虽能把excel里的数据输出到jsp页面上,但还不够完美: 还未实现读公式,布尔型等类型的值,同时字体大小不能很好的控制。字体颜色、单元格的背景色,都是通过计算得出的(*_o只因不会直接使用Colour 这个类。),同时代码也比较烦琐,希望有兴趣的高手,帮忙修改,先谢谢了!
发表评论
-
web应用生产环境properties文件自动更新
2016-12-06 23:04 611在我们的生产系统上,如果我们修改了properties中的 ... -
“手机号码输入控件“实现
2015-10-29 23:15 1065<! DOCTYPE html> < h ... -
fastjson的使用
2012-06-12 21:07 2123// 实体类Group定义 public class Gro ... -
JMAIL发送邮件时注意的问题
2012-05-14 17:01 1773最近使用jmail发送邮件,写了下面一段代码: String ... -
JavaMail邮件发送异常:{exception=java.lang.SecurityException: Access to default session
2012-02-09 09:52 3184起因:最近使用JavaMail发送邮件,WEB容器我用的是re ... -
使用POI对Office Excel 97-2003 版本以及2007版进行基本的读取操作
2011-03-18 15:11 2398使用POI对excel不同的版本进行读操作,参见以下代码: ... -
Java开发的WebService获取客户端IP地址
2010-11-17 10:46 72331.基于jax-ws开发的webservice获取客户端ip的 ... -
Java使用Axis调用.NET语言开发的WebService
2010-11-17 10:42 1742Java结合Axis调用.net语言开发的WebService ... -
DES加密与解密
2010-03-17 18:29 1173===================使用DES进行加密和解密 ... -
Sax 解析xml文件时, 数据信息不完整问题解决方法
2010-01-04 13:31 3842使用Sax对xml文件进行解析时,Sax每次只读入2k数据,当 ... -
Struts 中常见的错误
2009-03-23 11:36 9501、“No bean found under att ... -
使用JXL 读取Excel合并单元格方法
2009-03-07 11:36 9361import java.io.FileInputStrea ... -
org.apache.struts.taglib.html.BEAN
2009-03-05 12:40 43181、Cannot find bean under name o ...
相关推荐
在jsp中用Java读取Excel中的数据,以便把该数据写入数据库或jsp页面,对Excel导入很有帮助
JXL库是一个广泛使用的Java库,它允许开发者读取、写入和修改Excel文件。本篇将深入探讨如何使用JXL库在Java中打印Excel报表。 首先,要使用JXL库,你需要在项目中引入它的依赖。在本例中,`jxl.jar`是JXL库的核心...
在给定的标题和描述中,"jsp+jspsmart上传+poi3.8读取excel2007+jxl读取excel2003" 提到了一种结合Java Web技术实现文件上传,并通过不同库解析Excel文件的解决方案。这里我们将详细探讨涉及的各个知识点。 首先,`...
以下是一个简单的示例,展示如何使用JXL读取Excel文件: ```java import jxl.*; public class ExcelReader { public static void main(String[] args) { try { Workbook workbook = Workbook.getWorkbook(new ...
6. **读取Excel**:除了生成Excel文件,jxl还可以读取已有的Excel文件,将其内容转化为Java数据结构,便于处理和分析。 7. **示例代码**:通常,使用jxl的流程包括加载模板文件,找到要填充的单元格,使用`Cell....
标题“利用jxl把excel中的数据导入数据库”指的是使用Java Excel API(jxl)这个库来读取Excel文件中的数据,并将这些数据批量地导入到关系型数据库中。这是一个常见的需求,特别是在处理大量结构化数据时,例如进行...
JXL(Java Excel API)是一个开源项目,它允许Java程序创建、修改和读取Excel文件。通过这个库,我们可以方便地在程序中动态生成Excel工作表,包括设置单元格格式、添加公式以及处理图像等复杂操作。在描述中提到的...
### jxl库在Java中用于读取Excel的关键知识点解析 #### 一、jxl库简介与功能 jxl是Java Excel API的一个实现,主要用于在Java应用程序中读取和写入Microsoft Excel工作簿。该库提供了丰富的API来处理Excel文档,...
- 遍历读取Excel文件:Jxl也支持读取Excel文件,我们可以创建`Workbook`对象,遍历`Worksheet`,读取每个单元格的数据。 - 错误处理:在生成文件过程中,可能会遇到各种错误,如文件不存在、权限问题等,因此需要...
#### 使用jxl读取Excel文件 接下来,我们详细分析给出的部分内容,了解如何使用jxl来读取Excel文件。 ```java ;charset=gb2312" language="java"%> *"%> <%@page import="jxl.*"%> <%@page import="jxl.write.*"%>...
总的来说,这个示例展示了如何在Spring MVC环境中,结合jxl库实现在JSP页面上提供一个导出Excel文件的功能。用户点击链接,后端服务将查询到的数据转换为Excel格式并提供下载。这种方法在需要将大量数据呈现给用户...
JXL(Java Excel API)是一个开源的Java库,专门用于读取、写入和修改Microsoft Excel文件。它支持多种操作,包括创建新的Excel工作簿,读取现有的工作簿,修改单元格内容,以及设置样式等。JXL库因其简单易用的API...
在本例中,我们使用 jxl.jar 库来读取 Excel 文件中的数据。 3. Excel 文件的准备 在本例中,我们需要准备一个 Excel 文件,其中包含要导入到数据库的数据。 4. 数据库的建表 在本例中,我们使用 SQL Server ...
1. **读取Excel文件**:使用`jxl`库的`Workbook`类来读取Excel文件。代码首先创建一个`Workbook`实例,然后获取第一个工作表(`sheet.getSheet(0)`)。 2. **解析Excel数据**:遍历Excel的行和列,使用`getCell()`...
使用JXL库读取Excel文件 #### 1.1 库简介 - **JXL (Java Excel API)**:这是一个用于读写Microsoft Excel文件的Java库。它提供了简单易用的API来处理Excel文件,支持多种格式,包括.xls。 - **适用范围**:适用于...
`JXL`库是一个广泛使用的Java库,它允许开发者读取和写入Microsoft Excel格式的文件。本文将深入探讨如何使用JXL进行Excel操作,特别是关于边框设置和单元格设置的细节。 首先,要使用JXL,需要将其添加到项目依赖...
jsp导excel到mysql数据库 jsp是一种服务器端脚本语言,通过jsp可以实现excel文件的上传和解析,并将数据导入到mysql数据库中。...方法一使用jxl库来读取excel文件,而方法二使用jsp上传excel文件并连接mysql数据库。
此外,还包含了使用jxl.jar的方法和示例,以及如何将数据从JSP页面导出到MySQL数据库的步骤,这为实际应用提供了实践指导。 **JExcelAPI介绍** JExcelAPI是一个开源的Java库,最初由Nicolaas Weideman创建,用于...