<%@ page contentType="text/html; charset=gb2312"%>
<%@ page import="javaio,jxl,jxlwrite,jxlwrite,jxlformat"%>
<%@page import="javasql"%>
<%@page import="javautil"%>
<%@ page import="javaawt"%>
<%@ page import="orgapachecommonsfileupload"%>
<%@ page import="comjspsmartSmartFile"%>
<jsp:useBean id="common" class="comteachdbcommonMethod" scope="page">
</jsp:useBean>
<%//实现EXCEL文件上传,上传之后把EXCEL文件中的内容导入SQL server数据库中
//用smartUpload组件把EXCEL文件上传
comjspsmartSmartUpload smartUpload = new comjspsmartSmartUpload(); //初始化smartUPload
smartUploadinitialize(pageContext);
smartUploadservice(request, response);
smartUploadupload();
comjspsmartSmartFile file = smartUploadgetFiles()getFile(0); //得到上页输入的文件
//取中文表单参数
String newFileName = "testxls";
//改名上传
filesaveAs("excel/" + newFileName, smartUploadSAVE_VIRTUAL);
%>
<%!public String codeToString(String str) {//处理中文字符串的函数
String s = str;
try {
byte tempB[] = sgetBytes("ISO-8859-1");
s = new String(tempB);
return s;
} catch (Exception e) {
return s;
}
}
%>
<html>
<head>
<title></title>
</head>
<body>
<%//得到前页传过来的参数
String courseId=sessiongetAttribute("courseId")toString();
%>
<%String path = requestgetRealPath("\\") + "excel" + "\\"
+ "testxls";//Excel文件URL
InputStream is = new FileInputStream(path);//写入到FileInputStream
jxlWorkbook wb = WorkbookgetWorkbook(is); //得到工作薄
jxlSheet st = wbgetSheet(0);//得到工作薄中的第一个工作表
int rsRows = stgetRows(); //得到excel的总行数
for (int i = 1; i < rsRows; i++) {
Cell cell0 = stgetCell(0, i);//得到工作表的第一个单元格,即A1
Cell cell1 = stgetCell(1, i);//得到工作表的第二个单元格,即A1
try {
String content0 = cell0getContents();//getContents()将Cell中的字符转为字符串
int content1 = IntegerparseInt(cell1getContents()); //得到条形码
//存入数据库
String sql = "insert into sy_score(courseId,scoreStudentName,score)"
+ "values("
+ courseId
+ ",'"
+ content0
+ "',"
+ content1+")";
Systemoutprintln(sql);
commonDel_Insert(sql); //执行SQL语句
} catch (Exception e) {
//如果EXCEL文件中输入的数据有错,则跳过此行数据
sessionsetAttribute("message", "有错误,不能导入,请检查您的excel文件");
continue;
}
}
wbclose();//关闭工作薄
isclose();//关闭输入流
responsesendRedirect("insert_donejsp"); //转到成功页
%>
</body>
</html>
这是jsp 的
需要下载 jxl包
还有struts的 需要的话也可以给你
使用poi能解决你的问题
或者是
import javaioBufferedReader;
import javaioFile;
import javaioFileReader;
import javaioIOException;
import static javalangSystemout;
public class FileTest {
/
@param args
@throws IOException
/
public static void main(String[] args) throws IOException {
String string = "";
File file = new File("c:" + Fileseparator + "xxxxls");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String str;
while((str = brreadLine()) != null) {
string += str;
}
outprintln(string);
}
}
以下是使用java从excel表提取内容的程序 -
import javaioFile;import javaioFileInputStream;import orgapachetikametadataMetadata;import orgapachetikaparserParseContext;import orgapachetikaparsermicrosoftooxmlOOXMLParser;import orgapachetikasaxBodyContentHandler;public class ExtractContentFromExcel {
public static void main(String args[]) throws Exception {
// detecting the file type
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();
FileInputStream inputstream = new FileInputStream(new File("excelExamplexlsx"));
ParseContext pcontext = new ParseContext();
// OOXml parser
OOXMLParser msofficeparser = new OOXMLParser();
msofficeparserparse(inputstream, handler, metadata, pcontext);
Systemoutprintln("Contents of the document:" + handlertoString());
Systemoutprintln("Metadata of the document:");
String[] metadataNames = metadatanames();
for (String name : metadataNames) {
Systemoutprintln(name + ": " + metadataget(name));
}
}}Java
原ODF文件:excelExamplexlsx 的内容如下 -
执行上面示例代码,得到以下结果 -
SLF4J: Class path contains multiple SLF4J bindings
SLF4J: Found binding in [jar:file:/F:/worksp/javaexamples/libs/tika_libs/tika-app-116jar!/org/slf4j/impl/StaticLoggerBinderclass]
SLF4J: Found binding in [jar:file:/F:/worksp/javaexamples/libs/tika_libs/tika-server-116jar!/org/slf4j/impl/StaticLoggerBinderclass]
SLF4J: See >
使用java poi
package webservice;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioFileOutputStream;
import javaioIOException;
import orgapachepoihssfusermodelHSSFCell;
import orgapachepoihssfusermodelHSSFRow;
import orgapachepoihssfusermodelHSSFSheet;
import orgapachepoihssfusermodelHSSFWorkbook;
public class ExcelController {
@SuppressWarnings("deprecation")
public void excel() throws FileNotFoundException, IOException{
String filename = "d:\\excelxls";
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filename));
//按名引用excel工作表
// HSSFSheet sheet = workbookgetSheet("JSP");
//也可以用以下方式来获取excel的工作表,采用工作表的索引值
HSSFSheet sheet = workbookgetSheetAt(0);
HSSFRow row ;
HSSFCell cell1;
int rows=sheetgetLastRowNum();
for(int icount=0;icount<rows;icount++){
row = sheetgetRow(icount);
int line=rowgetPhysicalNumberOfCells();
for(int j=0;j<line;j++){
cell1= rowgetCell(j);
Systemoutprintln(cell1+"--"+icount+"---"+j);
}
}
//打印读取值
// Systemoutprintln(cellgetStringCellValue());
//新建一输出流
FileOutputStream fout = new FileOutputStream(filename); //PS:filename 是你另存为的路径,不处理直接写入模版文件
//存盘
workbookwrite(fout);
foutflush();
//结束关闭
foutclose();
}
public HSSFCell getCell(HSSFRow row, int index) {
// 取得分发日期单元格
HSSFCell cell = rowgetCell(index);
// 如果单元格不存在
if (cell == null) {
// 创建单元格
cell = rowcreateCell(index);
}
// 返回单元格
return cell;
}
public static void main(String[] args) {
ExcelController ec = new ExcelController();
try {
ecexcel();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
eprintStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
import javaio;
import jxl;
… … … …
try
{
//构建Workbook对象, 只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创建Workbook
InputStream is = new FileInputStream(sourcefile);
jxlWorkbook rwb = WorkbookgetWorkbook(is);
}
catch (Exception e)
{
eprintStackTrace();
}
一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。参考下面的代码片段:
//获取第一张Sheet表
Sheet rs = rwbgetSheet(0);
我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。
一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。参考下面的代码片段:
//获取第一行,第一列的值
Cell c00 = rsgetCell(0, 0);
String strc00 = c00getContents();
//获取第一行,第二列的值
Cell c10 = rsgetCell(1, 0);
String strc10 = c10getContents();
//获取第二行,第二列的值
Cell c11 = rsgetCell(1, 1);
String strc11 = c11getContents();
Systemoutprintln("Cell(0, 0)" + " value : " + strc00 + "; type : " +
c00getType());
Systemoutprintln("Cell(1, 0)" + " value : " + strc10 + "; type : " +
c10getType());
Systemoutprintln("Cell(1, 1)" + " value : " + strc11 + "; type : " +
c11getType());
如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。
如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。参考下面的代码片段:
String strc00 = null;
double strc10 = 000;
Date strc11 = null;
Cell c00 = rsgetCell(0, 0);
Cell c10 = rsgetCell(1, 0);
Cell c11 = rsgetCell(1, 1);
if(c00getType() == CellTypeLABEL)
{
LabelCell labelc00 = (LabelCell)c00;
strc00 = labelc00getString();
}
if(c10getType() == CellTypeNUMBER)
{
NmberCell numc10 = (NumberCell)c10;
strc10 = numc10getValue();
}
if(c11getType() == CellTypeDATE)
{
DateCell datec11 = (DateCell)c11;
strc11 = datec11getDate();
}
Systemoutprintln("Cell(0, 0)" + " value : " + strc00 + "; type : " +
c00getType());
Systemoutprintln("Cell(1, 0)" + " value : " + strc10 + "; type : " +
c10getType());
Systemoutprintln("Cell(1, 1)" + " value : " + strc11 + "; type : " +
c11getType());
在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:
每种类型的具体意义,请参见Java Excel API Document。
当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:
// *** 作完成时,关闭对象,释放占用的内存空间
rwbclose();
Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介绍几个常用的方法,其它的方法请参考附录中的Java Excel API Document。
Workbook类提供的方法
1 int getNumberOfSheets()
获得工作薄(Workbook)中工作表(Sheet)的个数,示例:
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
int sheets = rwbgetNumberOfSheets();
2 Sheet[] getSheets()
返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
Sheet[] sheets = rwbgetSheets();
3 String getVersion()
返回正在使用的API的版本号,好像是没什么太大的作用。
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
String apiVersion = rwbgetVersion();
Sheet接口提供的方法
1 String getName()
获取Sheet的名称,示例:
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
jxlSheet rs = rwbgetSheet(0);
String sheetName = rsgetName();
2 int getColumns()
获取Sheet表中所包含的总列数,示例:
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
jxlSheet rs = rwbgetSheet(0);
int rsColumns = rsgetColumns();
3 Cell[] getColumn(int column)
获取某一列的所有单元格,返回的是单元格对象数组,示例:
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
jxlSheet rs = rwbgetSheet(0);
Cell[] cell = rsgetColumn(0);
4 int getRows()
获取Sheet表中所包含的总行数,示例:
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
jxlSheet rs = rwbgetSheet(0);
int rsRows = rsgetRows();
5 Cell[] getRow(int row)
获取某一行的所有单元格,返回的是单元格对象数组,示例子:
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
jxlSheet rs = rwbgetSheet(0);
Cell[] cell = rsgetRow(0);
6 Cell getCell(int column, int row)
获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同。
jxlWorkbook rwb = jxlWorkbookgetWorkbook(new File(sourcefile));
jxlSheet rs = rwbgetSheet(0);
Cell cell = rsgetCell(0, 0);
生成新的Excel工作薄
下面的代码主要是向大家介绍如何生成简单的Excel工作表,在这里单元格的内容是不带任何修饰的(如:字体,颜色等等),所有的内容都作为字符串写入。(完整代码见ExcelWritingjava)
与读取Excel工作表相似,首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象,这里要注意的是,只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,因为类WritableWorkbook的构造函数为protected类型。示例代码片段如下:
import javaio;
import jxl;
import jxlwrite;
… … … …
try
{
//构建Workbook对象, 只读Workbook对象
//Method 1:创建可写入的Excel工作薄
jxlwriteWritableWorkbook wwb = WorkbookcreateWorkbook(new File(targetfile));
//Method 2:将WritableWorkbook直接写入到输出流
/
OutputStream os = new FileOutputStream(targetfile);
jxlwriteWritableWorkbook wwb = WorkbookcreateWorkbook(os);
/
}
catch (Exception e)
{
eprintStackTrace();
}
API提供了两种方式来处理可写入的输出流,一种是直接生成本地文件,如果文件名不带全路径的话,缺省的文件会定位在当前目录,如果文件名带有全路径的话,则生成的Excel文件则会定位在相应的目录;另外一种是将Excel对象直接写入到输出流,例如:用户通过浏览器来访问Web服务器,如果>
以上就是关于怎样用Java读取EXCEL全部的内容,包括:怎样用Java读取EXCEL、如何用JAVA读取EXCEL文件里面的数据、如何使用java从excel表提取内容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)