方法/步骤
Java中使用poi的jar包实现,导出excel模板,当字段中函数像身份z号这样很长的字段时,由于数据格式默认为常规,就会导致显示错乱,所以需要重新设置为文本,就不会导致出错
java 读取excel并设置各列数据的类型,如下信息:现在需读取的数据第一列为String,第二、三列均为是longList<Info>list = new ArrayList
构建Workbook对象, 只读Workbook对象//直接从本地文件创建Workbook //从输入流创建Workbook
仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。
一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。因为在Excel文件中只有字符串和数字。如果Cell的Type为CELL_TYPE_NUMERIC时,还需要进一步判断该Cell的数据格式,因为它有可能是Date类型,在Excel中的Date类型也是以Double类型的数字存储的
我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。
importorg.apache.poi.hssf.usermodel.HSSFCell
import
org.apache.poi.hssf.usermodel.HSSFCellStyle
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.poifs.filesystem.POIFSFileSystem
/**
*
@param
inputFile
输入模板文件路径
*
@param
outputFile
输入文件存放于服务器路径
*
@param
dataList
待导出数据
*
@throws
Exception
*
@roseuid:
*/
public
void
exportExcelFile(String
inputFile,
String
outputFile,
List
dataList)
throws
Exception
{
//用模板文件构造poi
POIFSFileSystem
fs
=
new
POIFSFileSystem(new
FileInputStream(inputFile))
//创建模板工作表
HSSFWorkbook
templatewb
=
new
HSSFWorkbook(fs)
//直接取模板第一个sheet对象
HSSFSheet
templateSheet
=
templatewb.getSheetAt(1)
//得到模板的第一个sheet的第一行对象
为了得到模板样式
HSSFRow
templateRow
=
templateSheet.getRow(0)
//HSSFSheet
timplateSheet
=
templatewb.getSheetAt(1)
//取得Excel文件的总列数
int
columns
=
templateSheet.getRow((short)
0).getPhysicalNumberOfCells()
Debug.println("columns
is
:
"
+
columns)
//创建样式数组
HSSFCellStyle
styleArray[]
=
new
HSSFCellStyle[columns]
//一次性创建所有列的样式放在数组里
for
(int
s
=
0
s
<
columns
s++)
{
//得到数组实例
styleArray[s]
=
templatewb.createCellStyle()
}
//循环对每一个单元格进行赋值
//定位行
for
(int
rowId
=
1
rowId
<
dataList.size()
rowId++)
{
//依次取第rowId行数据
每一个数据是valueList
List
valueList
=
(List)
dataList.get(rowId
-
1)
//定位列
for
(int
columnId
=
0
columnId
<
columns
columnId++)
{
//依次取出对应与colunmId列的值
//每一个单元格的值
String
dataValue
=
(String)
valueList.get(columnId)
//取出colunmId列的的style
//模板每一列的样式
HSSFCellStyle
style
=
styleArray[columnId]
//取模板第colunmId列的单元格对象
//模板单元格对象
HSSFCell
templateCell
=
templateRow.getCell((short)
columnId)
//创建一个新的rowId行
行对象
//新建的行对象
HSSFRow
hssfRow
=
templateSheet.createRow(rowId)
//创建新的rowId行
columnId列
单元格对象
//新建的单元格对象
HSSFCell
cell
=
hssfRow.createCell((short)
columnId)
//如果对应的模板单元格
样式为非锁定
if
(templateCell.getCellStyle().getLocked()
==
false)
{
//设置此列style为非锁定
style.setLocked(false)
//设置到新的单元格上
cell.setCellStyle(style)
}
//否则样式为锁定
else
{
//设置此列style为锁定
style.setLocked(true)
//设置到新单元格上
cell.setCellStyle(style)
}
//设置编码
cell.setEncoding(HSSFCell.ENCODING_UTF_16)
//Debug.println("dataValue
:
"
+
dataValue)
//设置值
统一为String
cell.setCellValue(dataValue)
}
}
//设置输入流
FileOutputStream
fOut
=
new
FileOutputStream(outputFile)
//将模板的内容写到输出文件上
templatewb.write(fOut)
fOut.flush()
// *** 作结束,关闭文件
fOut.close()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)