这条结果的sql中用sum函数做了一个求和的运算,
虽然sum函数返回的类型是double的,但是和E也没有什么关系吧,最后的解决办法。
new DecimalFormat(“0”).format(hlw)
格式化以后回归正常。
下面是使用Java实现的,将Excel数据表中的数据导入到数据库里里面。1
public class ReadExcel {
/**
* 对外提供读取excel 的方法
* */
public static List<List<Object>>readExcel(File file) throws IOException {
String fileName = file.getName()
String extension = fileName.lastIndexOf(".") == -1 ? "" : fileName
.substring(fileName.lastIndexOf(".") + 1)
if ("xls".equals(extension)) {
return read2003Excel(file)
} else if ("xlsx".equals(extension)) {
return read2007Excel(file)
} else {
throw new IOException("不支持的文件类型")
}
}
/**
* 读取 office 2003 excel
*
* @throws IOException
* @throws FileNotFoundException
*/
private static List<List<Object>>read2003Excel(File file)
throws IOException {
List<List<Object>>list = new LinkedList<List<Object>>()
HSSFWorkbook hwb = new HSSFWorkbook(new FileInputStream(file))
HSSFSheet sheet = hwb.getSheetAt(0)
Object value = null
HSSFRow row = null
HSSFCell cell = null
int counter = 0
for (int i = sheet.getFirstRowNum()counter <sheet
.getPhysicalNumberOfRows()i++) {
row = sheet.getRow(i)
if (row == null) {
continue
} else {
counter++
}
List<Object>linked = new LinkedList<Object>()
for (int j = row.getFirstCellNum()j <= row.getLastCellNum()j++) {
cell = row.getCell(j)
if (cell == null) {
continue
}
DecimalFormat df = new DecimalFormat("0")// 格式化 number String
// 字符
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss")// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.00")// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
// System.out.println(i + "行" + j + " 列 is String type")
value = cell.getStringCellValue()
break
case XSSFCell.CELL_TYPE_NUMERIC:
/*System.out.println(i + "行" + j
+ " 列 is Number type DateFormt:"
+ cell.getCellStyle().getDataFormatString())*/
if ("@".equals(cell.getCellStyle().getDataFormatString())) {
value = df.format(cell.getNumericCellValue())
} else if ("General".equals(cell.getCellStyle()
.getDataFormatString())) {
value = nf.format(cell.getNumericCellValue())
} else {
value = sdf.format(HSSFDateUtil.getJavaDate(cell
.getNumericCellValue()))
}
break
case XSSFCell.CELL_TYPE_BOOLEAN:
// System.out.println(i + "行" + j + " 列 is Boolean type")
value = cell.getBooleanCellValue()
break
case XSSFCell.CELL_TYPE_BLANK:
// System.out.println(i + "行" + j + " 列 is Blank type")
value = ""
break
default:
// System.out.println(i + "行" + j + " 列 is default type")
value = cell.toString()
}
if (value == null || "".equals(value)) {
continue
}
linked.add(value)
}
list.add(linked)
}
return list
}
/**
* 读取Office 2007 excel
* */
private static List<List<Object>>read2007Excel(File file)
throws IOException {
List<List<Object>>list = new LinkedList<List<Object>>()
// 构造 XSSFWorkbook 对象,strPath 传入文件路径
XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file))
// 读取第一章表格内容
XSSFSheet sheet = xwb.getSheetAt(0)
Object value = null
XSSFRow row = null
XSSFCell cell = null
int counter = 0
for (int i = sheet.getFirstRowNum()counter <sheet
.getPhysicalNumberOfRows()i++) {
row = sheet.getRow(i)
if (row == null) {
continue
} else {
counter++
}
List<Object>linked = new LinkedList<Object>()
for (int j = row.getFirstCellNum()j <= row.getLastCellNum()j++) {
cell = row.getCell(j)
if (cell == null) {
continue
}
DecimalFormat df = new DecimalFormat("0")// 格式化 number String
// 字符
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss")// 格式化日期字符串
DecimalFormat nf = new DecimalFormat("0.00")// 格式化数字
switch (cell.getCellType()) {
case XSSFCell.CELL_TYPE_STRING:
System.out.println(i + "行" + j + " 列 is String type")
value = cell.getStringCellValue()
break
case XSSFCell.CELL_TYPE_NUMERIC:
/* System.out.println(i + "行" + j
+ " 列 is Number type DateFormt:"
+ cell.getCellStyle().getDataFormatString())*/
if ("@".equals(cell.getCellStyle().getDataFormatString())) {
value = df.format(cell.getNumericCellValue())
} else if ("General".equals(cell.getCellStyle()
.getDataFormatString())) {
value = nf.format(cell.getNumericCellValue())
} else {
value = sdf.format(HSSFDateUtil.getJavaDate(cell
.getNumericCellValue()))
}
break
case XSSFCell.CELL_TYPE_BOOLEAN:
// System.out.println(i + "行" + j + " 列 is Boolean type")
value = cell.getBooleanCellValue()
break
case XSSFCell.CELL_TYPE_BLANK:
// System.out.println(i + "行" + j + " 列 is Blank type")
value = ""
break
default:
// System.out.println(i + "行" + j + " 列 is default type")
value = cell.toString()
}
if (value == null || "".equals(value)) {
continue
}
linked.add(value)
}
list.add(linked)
}
return list
}
public static void main(String[] args) {
try {
readExcel(new File("D:\\Java\\apache-tomcat-8.0.26\\webapps\\poi\\docs\\testRead.xls"))
// readExcel(new File("D:\\test.xls"))
/*
String docsPath = request.getSession(true).getServletContext()
.getRealPath("docs")
String fileName = "testRead.xls"
String filePath = docsPath
if (EPlatform.Windows.equals(OSinfo.getOSname())) {
filePath = filePath + "\\" + fileName
} else {
filePath = filePath + "/" + fileName
}
filePath = "E:\\testRead.xls"
List<List<Object>>list = readExcel(new File(filePath))
request.setAttribute("list", list)
RequestDispatcher dispatcher = request
.getRequestDispatcher("/read.jsp")
dispatcher.forward(request, response)
*/
} catch (IOException e) {
e.printStackTrace()
}
}
}
java里面有的…… DecimalFormat字符含义
0
一位数字,这一位缺失显示为0。用来补零
#
一位数字, 这一位缺失就不显示
.
小数点,不用多说了吧
,
千位分隔符
E
科学计数法
%
百分比
比如你要的就是#.00 你搜下DecimalFormat 吧。我搞c的……前阵正好项目中java的同事碰到这个
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)