您的位置:首页 > Web前端 > HTML

工作笔记:maven项目-Excel to HTML

2017-03-14 10:41 309 查看
package com.chinadaas.riskbell;

import java.io.*;

/**
* Created by pc on 2017/3/13.
*/
public class ToHtml {

public ToHtml(){

}
public static void main(String[] args){
//输入类型判断
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入要进行的操作编号(1、2、3):\n1、单个文件转换\n2、文件夹转换\n3、结束");
String type="";
while(true){
try{
type=bf.readLine();
if(type.equals("1")==true){
System.out.println("你输入的是单个文件转换:"+type);
//单个文件转换函数
System.out.print("请输入文件目录地址:");
BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
String dirPath =b.readLine();
File file = new File(dirPath);
Els_x_toHtml els_x_toHtml=new Els_x_toHtml(dirPath,"F:\\"+file.getName()+".html");
System.out.println("转化后的输出路径为:"+"F:\\"+file.getName()+".html");
}
else if(type.equals("2")==true){
System.out.println("你输入的是目录转换:"+type);
//多文件转换接口
ToHtml toHtml=new ToHtml();

//循环调用单个文件转换
System.out.print("请输入文件目录地址:");
BufferedReader bf2=new BufferedReader(new InputStreamReader(System.in));
String dirPath2 =bf2.readLine();
System.out.print("请输入文件输出目录地址:");
BufferedReader bf3=new BufferedReader(new InputStreamReader(System.in));
String dirPath3 =bf3.readLine();
Dir_todir dir_todir = new Dir_todir(dirPath2,dirPath3);

}
else if(type.equals("3")==true){
System.out.println("结束"+type);
break;
}
else{
System.out.println("你输入的不是有效内容");
System.out.println("请输入要进行的操作编号(1、2、3):\n1、单个文件转换\n2、文件夹转换\n3、结束");
}
} catch (IOException e) {   e.printStackTrace();}
}
System.out.print("done");
}
}

package com.chinadaas.riskbell;

import java.io.File;
import java.io.IOException;

/**
* Created by pc on 2017/3/13.
*/
public class Dir_todir {

private String indirPath=null;
private String outdirPath=null;
private File outPath;
private File inPath;

public Dir_todir (String indirPath,String outdirPath){
this.indirPath=indirPath;
this.outdirPath=outdirPath;
this.inPath=new File(indirPath);
this.outPath= new File(outdirPath);
if (inPath.exists()) {
if (inPath.isDirectory()) {
System.out.println("输入路径存在");
try {
createdir();
getFileList(indirPath,indirPath,outdirPath);
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("输入路径不是文件夹");
}
} else {
System.out.println("输入路径不存在");
}
System.out.print("请按任意键继续");
}

/**创建路径*/
public void createdir() throws IOException{
String lastName =inPath.getName();
outPath = new File(outdirPath);
String outPutPathName =outPath.getPath()+"\\"+lastName; //输出的路径名
outPath=new File(outPutPathName);
outPath.mkdirs();
}
/**
* 为文件生成多级目录
*@param strPath,源目录文件根地址
*@param ipath 源文件地址(用于剪切字符)
*@param opath 目标文件根目录
*/
public void getFileList(String strPath,String ipath,String opath)throws IOException {
File dir = new File(strPath);
File dirin = new File(ipath);
File[] files = dir.listFiles(); // 该文件目录下文件全部放入数组
if (files != null) {
for (int i = 0; i < files.length; i++) {
String fileName = files[i].getName();
if (files[i].isDirectory()) { // 判断是文件还是文件夹,如果是文件夹获取在子目录中的文件夹名称
String filename = files[i].getAbsolutePath().replace(dirin.getAbsolutePath(),"") ;
File outp = new File(opath+"\\"+dirin.getName()+filename);
outp.mkdirs();
getFileList(files[i].getAbsolutePath(),ipath,opath); // 迭代
} else if (fileName.endsWith("xlsx")) { // 判断文件名是否以.xlsx结尾
String strFileName = files[i].getName();
String strFiledir = files[i].getAbsolutePath();
//加工文件名称 1、去除输入路径的文件名:F:\AAAA\AAASS\A.XLDX----->F:\AAAA\AAASS\
String str1=strFiledir.replace(strFileName,"");
//加工文件名称 2、去除输入路径的根目录:F:\AAAA\AAASS\------>\AAASS\
String str2=str1.replace(ipath,"");
//加工文件名称 3、增加输出目录的根目录:\AAASS\------>F:\asd\AAASS\
String str3=opath+"\\"+dirin.getName()+str2+strFileName.substring(0,strFileName.indexOf(".xlsx")) + ".html";
//输出文件 Els_x_toHtml(输入路径,输出路径)
File filetest = new File(str3);
filetest.mkdirs();
Els_x_toHtml els_x_toHtml_xlsx = new Els_x_toHtml(strFiledir,str3+"\\"+strFileName+".html");

}else if (fileName.endsWith("xls")) { // 判断文件名是否以.xls结尾
String strFileName = files[i].getName();
String strFiledir = files[i].getAbsolutePath();
//加工文件名称 1、去除输入路径的文件名:F:\AAAA\AAASS\A.XLDX----->F:\AAAA\AAASS\
String str1=strFiledir.replace(strFileName,"");
//加工文件名称 2、去除输入路径的根目录:F:\AAAA\AAASS\------>\AAASS\
String str2=str1.replace(ipath,"");
//加工文件名称 3、增加输出目录的根目录:\AAASS\------>F:\asd\AAASS\
String str3=opath+"\\"+dirin.getName()+str2+strFileName.substring(0,strFileName.indexOf(".xls")) + ".html";
//输出文件 Els_x_toHtml(输入路径,输出路径)
File filetest = new File(str3);
filetest.mkdirs();
Els_x_toHtml els_x_toHtml_xls = new Els_x_toHtml(strFiledir,str3+"\\"+strFileName+".html");
} else {
continue;
}
}
}
}
}


package com.chinadaas.riskbell;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.NumberToTextConverter;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Formatter;

/**
* Created by pc on 2017/3/13.
* @para 输入路径(文件名),输出路径(文件夹名)
* 完成文件的对应输出
*
*/
public class Els_x_toHtml {

private final Workbook wb;
private HSSFWorkbook hwb;
private XSSFWorkbook xwb;
private Appendable output;
private Formatter out;
private int sheetNo;
private String sheetNames[];

private String outputPath;
private String inputPath;

public Els_x_toHtml(String inputPath,String outputPath) throws IOException{
this.outputPath=outputPath;
this.inputPath=inputPath;
try {
wb = WorkbookFactory.create(new FileInputStream(inputPath));
output= new PrintWriter(new FileWriter(outputPath));
if (wb == null)
throw new NullPointerException("wb");
if (output == null)
throw new NullPointerException("output");
sheetNo = wb.getNumberOfSheets();
getNames(sheetNo);
printPage();
} catch (Exception e){
throw new IllegalArgumentException("Cannot create workbook from stream", e);
}
}
private void constructTabHeader()
{
out.format("<div id=\"main\">");
out.format("<div class=\"ui-widget-header ui-corner-top\" >%n");
out.format("<ul>%n");
for(int i=0;i<sheetNo;i++)
{
out.format("<li>%n");
out.format("<a href =\"#tabs-"+(i+1)+"\">"+sheetNames[i]+"</a>%n");
out.format("</li>%n");
}
out.format("</div>");
}

private void getNames(int num)
{
sheetNames = new String[num];
for(int i=0;i<num;i++)
{
String name = wb.getSheetName(i);
sheetNames[i]=name;
}
}

//判断Excel版本
private void printsheets() throws IOException{
if (wb instanceof HSSFWorkbook)
{
hwb=new HSSFWorkbook(new FileInputStream(inputPath));
int sheetnum=hwb.getNumberOfSheets();
for(int nums=0;nums<sheetnum;nums++){
HSSFSheet sheet = hwb.getSheetAt(nums);
String name = sheet.getSheetName();
int numr =sheet.getPhysicalNumberOfRows();
int numc =sheet.getLeftCol();
out.format("<p>工作页码"+nums+"</p>\n" +
"<p>.工作空间名称:"+name+"</p>\n"+
"<p>行列数:"+ numr+" ,"+numc+"<p>");
for(int i=0;i<numr;i++){
//System.out.print("i:"+i);
out.format("<table ><tr>\n");
HSSFRow hssfRow = sheet.getRow(i);
numc=hssfRow.getPhysicalNumberOfCells();
for(int j=0;j<numc;j++){
//System.out.print("j:"+j);
HSSFCell cell =hssfRow.getCell(j);
String str =getCellValue(cell);
out.format("<td>"+str+"</td>\n" );
}
out.format("</tr>\n</table>");
}
}
}
else if (wb instanceof XSSFWorkbook)
{
xwb=new XSSFWorkbook(new FileInputStream(inputPath));
int sheetnum=xwb.getNumberOfSheets();
for(int nums=0;nums<sheetnum;nums++){
XSSFSheet sheet = xwb.getSheetAt(nums);
String name = sheet.getSheetName();
int numr =sheet.getPhysicalNumberOfRows();
int numc =sheet.getLeftCol();
out.format("<p>工作页码"+nums+"</p>\n" +
"<p>.工作空间名称:"+name+"</p>\n"+
"<p>行列数:"+ numr+" ,"+numc+"<p>");
for(int i=0;i<numr;i++){
XSSFRow xssfRow = sheet.getRow(i);
numc=xssfRow.getPhysicalNumberOfCells();
out.format("<table ><tr>\n");
for(int j=0;j<numc;j++){
XSSFCell cell =xssfRow.getCell(j);
String str =getCellValue(cell);
out.format("<td>"+str+"</td>\n" );
}
out.format("</tr>\n</table>");
}
}
}
else
throw new IllegalArgumentException(
"unknown workbook type: " + wb.getClass().getSimpleName());
}

public void printPage() throws IOException {
try {
ensureOut();
int sheetnum = wb.getNumberOfSheets();
out.format("<!DOCTYPE html>%n");
out.format("<html>%n");
out.format("<head>%n");
out.format("<meta charset=\"utf-8\">%n");
out.format("<title>Excel转换HTML测试version1</title>%n");
out.format("</head>%n");
out.format("<body>%n");
out.format("<style type=\"text/css\">\n" +
"td\n" +
" {\n" +
" height:18px;\n" +
" width:130px;\n" +
" vertical-align:middle;\n" +
" }table,th\n" +
" {\n" +
" border: 1px solid black;\n" +
" font-size:10px;\n" +
" }table\n" +
" {\n" +
" border-collapse:collapse;\n" +
" width:100%%;\n" +
" }\n" +
" </style>\n" +
" </body>");

printsheets();
if (true) {
out.format("</body>%n");
out.format("</html>%n");
}
} finally {
if (out != null)
out.close();
if (output instanceof Closeable) {
Closeable closeable = (Closeable) output;
closeable.close();
wb.close();
}
}
}

private void ensureOut() {
if (out == null)
out = new Formatter(output);
}

private String getCellValue(Cell cell) {
String cellvalue = "";
if (cell != null) {
// 判断当前Cell的Type
switch (cell.getCellType()) {
// 如果当前Cell的Type为NUMERIC
case HSSFCell.CELL_TYPE_NUMERIC: {
short format = cell.getCellStyle().getDataFormat();
if(format == 14 || format == 31 || format == 57 || format == 58){ //excel中的时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
double value = cell.getNumericCellValue();
Date date = DateUtil.getJavaDate(value);
cellvalue = sdf.format(date);
}
// 判断当前的cell是否为Date
else if (HSSFDateUtil.isCellDateFormatted(cell)) { //先注释日期类型的转换,在实际测试中发现HSSFDateUtil.isCellDateFormatted(cell)只识别2014/02/02这种格式。
// 如果是Date类型则,取得该Cell的Date值 // 对2014-02-02格式识别不出是日期格式
Date date = cell.getDateCellValue();
DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
cellvalue= formater.format(date);
} else { // 如果是纯数字
// 取得当前Cell的数值
cellvalue = NumberToTextConverter.toText(cell.getNumericCellValue());

}
break;
}
// 如果当前Cell的Type为STRIN
case HSSFCell.CELL_TYPE_STRING:
// 取得当前的Cell字符串
cellvalue = cell.getStringCellValue().replaceAll("'", "''");
break;
case HSSFCell.CELL_TYPE_BLANK:
cellvalue = "";
break;
// 默认的Cell值
default:{
cellvalue = "";
}
}
} else {
cellvalue = "";
}
return cellvalue;
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: