- 浏览: 126364 次
最新评论
-
gaoxikun:
看起来很齐全,很完美,但是不知道从哪里下载 。
myeclipse插件简单介绍 -
gaoxikun:
亲,能把这个集成了插件的myeclipse 6.5给我一下吗, ...
myeclipse插件简单介绍 -
hotsmile:
不错!!!!!!!!!
myeclipse插件简单介绍
package com.huawei.bss.execlComm;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
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.hssf.util.Region;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ProcessXSL {
HSSFWorkbook wb = new HSSFWorkbook();
String workbookFileName = "d:/资源池人员跟踪_20120911.xlsx";
protected final Log log = LogFactory.getLog(getClass());
public ProcessXSL() {
}
/**
* 创建 Execl 文件
*
* @param wb
* HSSFWorkbook
* @param exportInfo
* BaseDataExportInfo
*/
public void createWorkBookSheet(BaseDataExportInfo exportInfo) {
Vector cellList = null;
if (exportInfo.getWorkbookFileName() != null)
workbookFileName = exportInfo.getWorkbookFileName() + ".xlsx";
try {
HSSFSheet sheet = wb.createSheet(exportInfo.getSheetIndex() + "");
wb.setSheetName(exportInfo.getSheetIndex(), exportInfo
.getSheetName());
/** 设置列宽 */
for (int i = 0; i < exportInfo.getTableHead().size(); i++) {
if (i == 1 || i == exportInfo.getTableHead().size() - 1) {
sheet.setColumnWidth(i, 7000);
} else {
sheet.setColumnWidth(i, 4000);
}
}
/** 合并单元格 */
//Region(int rowFrom, short colFrom, int rowTo, short colTo)与CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (exportInfo.getTableHead().size() - 1)));
/** 表 标题 */
HSSFRow row = sheet.createRow((short) 0);
row.setHeight((short) 500); // 设置行高
HSSFFont titleFont = wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 16);
titleFont.setBoldweight((short) 20);
HSSFCellStyle titleStyle = wb.createCellStyle();
titleStyle.setFont(titleFont);
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION); // 居中
row = this.createCell(row, (short) 0, titleStyle, exportInfo
.getSheetTitle());
/** 表头 */
HSSFFont headFont = wb.createFont();
headFont.setFontName("宋体");
headFont.setFontHeightInPoints((short) 12);
headFont.setBoldweight((short) 20);
HSSFCellStyle headStyle = wb.createCellStyle();
headStyle.setFont(headFont);
headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框
headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框
headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框
headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
HSSFRow row2 = sheet.createRow((short) 1);
row2.setHeight((short) 400); // 设置行高
for (int i = 0; i < exportInfo.getTableHead().size(); i++) {
row2 = this.createCell(row2, (short) i, headStyle, exportInfo
.getTableHead().get(i));
}
/** 表体 */
HSSFFont font = wb.createFont();
/** 设置字体样式 */
font.setFontName("宋体");
HSSFCellStyle cellStyle = wb.createCellStyle();
if (exportInfo.getCellDataFomat() != null
&& !"".equals(exportInfo.getCellDataFomat())) {
short stringFormat = HSSFDataFormat.getBuiltinFormat(exportInfo
.getCellDataFomat());
if (stringFormat != -1) {
cellStyle.setDataFormat(stringFormat);
}
}
cellStyle.setFont(font);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框
cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 居左
for (int i = 0; i < exportInfo.getRowList().size(); i++) {
cellList = (Vector) exportInfo.getRowList().get(i);
HSSFRow row3 = sheet.createRow((short) i + 2);
row3.setHeight((short) 300); // 设置行高
for (int j = 0; j < cellList.size(); j++) {
row3 = this.createCell(row3, (short) j, cellStyle, cellList
.get(j));
}
}
} catch (Exception ex) {
log.info("error while create work book sheet ", ex);
}
}
/**
* 创建 包含多个bookSheet 的 Execl 文件
*
* @param wb
* HSSFWorkbook
* @param exportInfo
* BaseDataExportInfo
*/
public void createMoreWorkBookSheet(BaseDataExportInfo exportInfo) {
if (exportInfo.getWorkbookFileName() != null)
workbookFileName = exportInfo.getWorkbookFileName() + ".xls";
try {
for (int n = 0; n < exportInfo.getRowList().size(); n++) {
// JOptionPane.showMessageDialog(null,"第" +(n+1)+ "分页!");
HSSFSheet sheet = wb.createSheet(n + "");
wb.setSheetName(n, exportInfo.getSheetName()+ " " + (n + 1));
/** 设置列宽 */
// 设置第二列和倒数第二类的宽度为7000,其它列宽度为4000
for (int i = 0; i < exportInfo.getTableHead().size(); i++) {
if (i == 1 || i == exportInfo.getTableHead().size() - 1) {
sheet.setColumnWidth( i, 7000);
} else {
sheet.setColumnWidth( i, 4000);
}
}
/** 合并单元格 */
// 生成标题行, Region的四个参数分别对应 (x1,y1,x2,y2)
sheet.addMergedRegion(new Region(0, (short) 0, 0,
(short) (exportInfo.getTableHead().size() - 1)));
/** 表标题 */
HSSFRow row = sheet.createRow((short) 0);
row.setHeight((short) 500); // 设置行高
// 格式化表标题
HSSFFont titleFont = wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 16);
titleFont.setBoldweight((short) 20);
HSSFCellStyle titleStyle = wb.createCellStyle();
titleStyle.setFont(titleFont);
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION); // 居中
row = this.createCell(row, (short) 0, titleStyle, exportInfo
.getSheetTitle());
/** 表头 */
// 格式化表头
HSSFFont headFont = wb.createFont();
headFont.setFontName("宋体");
headFont.setFontHeightInPoints((short) 12);
headFont.setBoldweight((short) 20);
HSSFCellStyle headStyle = wb.createCellStyle();
headStyle.setFont(headFont);
headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框
headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框
headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框
headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
HSSFRow row2 = sheet.createRow((short) 1);
row2.setHeight((short) 400); // 设置行高
for (int i = 0; i < exportInfo.getTableHead().size(); i++) {
row2 = this.createCell(row2, (short) i, headStyle,
exportInfo.getTableHead().get(i));
}
/** 表体 */
// 格式化表体
HSSFFont font = wb.createFont();
font.setFontName("宋体");
HSSFCellStyle cellStyle = wb.createCellStyle();
if (exportInfo.getCellDataFomat() != null
&& !"".equals(exportInfo.getCellDataFomat())) {
short stringFormat = HSSFDataFormat
.getBuiltinFormat(exportInfo.getCellDataFomat());
if (stringFormat != -1) {
cellStyle.setDataFormat(stringFormat);
}
}
cellStyle.setFont(font);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框
cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 居左
for (int i = 0; i < 98; i++) {
if (i < exportInfo.getRowList().size()) {
if ((i + n * 100) >= exportInfo.getRowList().size())
break;
Vector cellList = null;
cellList = (Vector) exportInfo.getRowList().get(
i + n * 100);
HSSFRow row3 = sheet.createRow((short) i + 2);
row3.setHeight((short) 300); // 设置行高
for (int j = 0; j < cellList.size(); j++) {
row3 = this.createCell(row3, (short) j, cellStyle,
cellList.get(j));
}
}
}
if ((100 * (n + 1) - 1) >= exportInfo.getRowList().size())
break;
}
} catch (Exception ex) {
log.info("error while create work book sheet ", ex);
}
}
/**
* 创建单元格
*
*
* @param row
* HSSFRow
* @param cellIndex
* short
* @param cellStyle
* HSSFCellStyle
* @param cellValue
* Object
* @return HSSFRow
*/
public HSSFRow createCell(HSSFRow row, int cellIndex,
HSSFCellStyle cellStyle, Object cellValue) {
HSSFCell cell = row.createCell( cellIndex);
try {
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
if (cellStyle != null) {
cell.setCellStyle(cellStyle);
}
if (cellValue == null) {
cell.setCellValue("");
} else if (cellValue instanceof Boolean) {
cell.setCellValue(((Boolean) cellValue).booleanValue());
} else if (cellValue instanceof String) {
cell.setCellValue((String.valueOf(cellValue)));
} else if (cellValue instanceof Date) {
cell.setCellValue((Date) cellValue);
} else {
cell.setCellValue("");
}
// log.info("this cell value is " + cellValue);
} catch (Exception ex) {
log.error("error while execut create cell ", ex);
}
return row;
}
/**
* 读取Excel 表
*
*
* @param aSheet
* HSSFSheet
* @throws Exception
* @return List
*/
public List<Object> readWeekBookSheet(Sheet aSheet) throws Exception {
List<Object> rowList = new ArrayList<Object>();
Vector<String> rowVector = null;
int rowNum = 1;
int cellNum = 1;
int maxCellNum = aSheet.getRow(1).getLastCellNum();
// HSSFCellStyle cellStyle = wb.createCellStyle();
// short stringFormat = HSSFDataFormat.getBuiltinFormat("@"); //请参考HSSFDataFormat内置的数据类型,例如"@"代表文本
// cellStyle.setDataFormat(stringFormat);
for (int rowNumOfSheet = 2; rowNumOfSheet <= aSheet.getPhysicalNumberOfRows(); rowNumOfSheet++) {
rowNum = rowNumOfSheet;
if (null != aSheet.getRow(rowNumOfSheet))
{
Row aRow = aSheet.getRow(rowNumOfSheet);
rowVector = new Vector<String>();
// System.out.println("==============================="+aRow.getCell(2).getCellType());
for (short cellNumOfRow = 0; cellNumOfRow <= maxCellNum; cellNumOfRow++)
{
cellNum = cellNumOfRow;
if (null != aRow.getCell(cellNumOfRow))
{
Cell aCell = aRow.getCell(cellNumOfRow);
int cellType = aCell.getCellType();
switch (cellType) {
case HSSFCell.CELL_TYPE_NUMERIC: // 整形
if (HSSFDateUtil.isCellDateFormatted(aCell))
{
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
rowVector.add(cellNumOfRow, format.format(aCell.getDateCellValue()));
}
else
{
rowVector.add(cellNumOfRow, String
.valueOf(aCell.getNumericCellValue()));
}
break;
case HSSFCell.CELL_TYPE_STRING: // 字符串型
rowVector.add(cellNumOfRow, aCell
.getStringCellValue().trim());
break;
case HSSFCell.CELL_TYPE_FORMULA: // double 型
rowVector.add(cellNumOfRow, String.valueOf(aCell.getStringCellValue()));
break;
case HSSFCell.CELL_TYPE_BLANK: // 空字符
rowVector.add(cellNumOfRow, "");
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // 布尔型
rowVector.add(cellNumOfRow, String
.valueOf(aCell.getBooleanCellValue()));
break;
default:
System.out.println("gggggggggggggggggggggggg"+cellType);
rowVector.add(cellNumOfRow, "");
}
}
else
{
rowVector.add(cellNumOfRow, "");
}
}
rowList.add(rowVector);
}
}
return rowList;
}
/**
* 写Execl 文件
*
* @param wb
* HSSFWorkbook
* @param outPutStream
* OutputStream
*/
public void writeWorkBook(HttpServletResponse response) {
try {
OutputStream outputStream = new BufferedOutputStream(response
.getOutputStream());
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("content-disposition", "attachment;filename=\""
+ new String(workbookFileName.getBytes(), response
.getCharacterEncoding()) + "\"");
wb.write(outputStream);
outputStream.close();
} catch (Exception ex) {
log.error("error while create work book ", ex);
}
}
/**
* 修改properties文件
* @param properties
* @param pathFile
*/
public static void modifyProperties(Properties properties,String pathFile)
{
InputStream inputStream = null;
OutputStream fos = null;
Properties tempProper = new Properties();
File file = new File(pathFile);
try
{
inputStream = new FileInputStream(file);
tempProper.load(inputStream);
fos = new FileOutputStream(file);
tempProper.setProperty("userName", properties.getProperty("userName"));
tempProper.setProperty("passwd", properties.getProperty("passwd"));
tempProper.store(fos, null);
}
catch (IOException e)
{
System.err.println(e.getStackTrace());
}
finally
{
try
{
if(null != fos)
{
fos.close();
}
if(null != inputStream)
{
inputStream.close();
}
}
catch (IOException e)
{
System.err.println(e.getStackTrace());
}
}
}
/**
* 读取Peoperties
* @param args
*/
/**
* 得到属性文件实例
*/
public static Properties getPropertiesByFile(String filePath)
{
InputStream inputStream = null;
Properties properties = new Properties();
try
{
File file = new File(filePath);
inputStream = new FileInputStream(file);
properties.load(inputStream);
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
finally
{
try
{
inputStream.close();
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
}
return properties;
}
public static void main(String[] args)
{
//需要导入poi-bin-3.8-20120326.zip包
ProcessXSL xsl =new ProcessXSL();
Workbook workBook = null;
try {
try {
workBook = new XSSFWorkbook(new FileInputStream("d:/资源池人员跟踪_20120911.xlsx")); // 支持2007
} catch (Exception ex) {
workBook = new HSSFWorkbook(new FileInputStream(
"d:/资源池人员跟踪_20120911.xlsx")); // 支持2003及以前
}
Sheet aSheet = workBook.getSheetAt(0);
List<Object> list = xsl.readWeekBookSheet(aSheet);
System.out.println("====================================="
+ list.size());
for (Object object : list)
{
System.out.println(object);
}
}
catch (Exception e1)
{
e1.printStackTrace();
}
}
}
发表评论
-
java 中的文件读取信息
2013-03-11 08:56 1118import java.io.BufferedReader ... -
oracle结果集的操作信息
2013-03-04 16:22 1016众所周知的几个结果集集合操作命令,今天详细地测试了一下,发现一 ... -
js正则表达式(二)
2013-01-09 11:20 929首先加个重要的东西 * ... -
java路径问题以及java对文件的基本操作信息
2012-12-19 14:09 10111.基本概念的理解 绝对 ... -
JS正则表达式
2012-11-15 17:10 888function isTrueName(s) { var pa ... -
java公用类
2012-11-15 17:05 896package cn.org.jshuwei.j2ee.uti ... -
java规范信息
2012-10-30 08:44 28891 一、判断选择题(每题1分) 1. 表达式要在低优先级操作符 ... -
java时间公用和StringUnitl以及java调用存储过程
2012-10-16 17:38 16681 构建存储过程的语句信息 /** * 从Fun ... -
jquery批量删除
2012-09-20 14:31 3426<%@ page language="java ... -
java操作execl文件
2012-09-19 08:53 1024package com.huawei.bss.execlCom ... -
通过onkeypress和onkeydown事件禁用键盘中某些键
2012-09-17 15:09 1000http://zywang.iteye.com/blog/70 ... -
properties的修改
2012-09-14 16:05 1098public static void modifyProper ... -
java学习的一点记录
2012-09-12 16:15 1336public class Tools { stati ... -
STRUTS2与JSON的LIST和MAP对象返回
2012-09-07 14:57 6712<%@ page language="java ... -
struts2 iterator双重叠迭取值
2012-09-05 18:08 1300•效果:Map<String,List<Derpa ... -
struts2多个配置文件的应用
2012-09-05 10:10 1116<!-- 定义Struts2的核心Filter --&g ... -
java中使用net.sf.json对json进行解析
2012-09-04 12:24 1091作者: http://zhangnet1.iteye.com/ ... -
XML的TreeConfig
2012-09-04 10:20 953/** * <?xml version=&qu ... -
JSON与 STRuts2
2012-09-04 10:20 1344package com.huawei.cmclient.com ... -
sql在不同数据库查询前几条数据
2012-09-03 15:14 832sql在不同数据库查询前几条数据 1. ORACLE ...
相关推荐
- 版本兼容性:jxl库主要针对旧版Excel(.xls),对于.xlsx(Excel 2007及以上版本)文件,可能需要使用Apache POI库。 总的来说,通过使用jxl库,Java开发者可以方便地实现对Excel文件的各种操作,满足各种业务...
对于Excel,它主要使用HSSF(Horizontally Stored Sheet Format)来处理.xls文件(Excel 97-2003格式),而XSSF(XML Spreadsheet Format)则用于处理.xlsx文件(Excel 2007及更高版本)。 2. **所需JAR包**: - `...
HSSFWorkbook适用于处理Excel 2003之前的版本(.xls),而XSSFWorkbook则是针对Excel 2007及以后版本(.xlsx)的。在处理自定义单元格背景颜色时,HSSFWorkbook的实现相对复杂,因此建议使用XSSFWorkbook,它提供了...
Excel文件因其灵活性、丰富的格式支持以及与多种应用程序的良好兼容性而广受欢迎。本篇文章将详细探讨如何使用Java来实现Excel文件的导出。 首先,我们需要一个库来处理Excel文件。Apache POI是一个广泛使用的开源...
使用Apache POI进行Java导出Excel时,需要注意文件的读写操作必须在合适的生命周期内完成,避免内存泄漏。同时,由于Excel文件结构复杂,处理时可能出现各种异常,需要做好异常处理。 在实际开发中,你可以结合...
在实际开发中,还需要考虑错误处理、性能优化、兼容性等问题。通过上述步骤,你可以创建一个能处理带图片的Excel导出的Java程序,适用于各种业务场景。当然,具体的实现代码会涉及更多的细节和具体操作,但以上知识...
7. **错误处理**: 在读写过程中,需要捕获并处理可能出现的异常,如文件不存在、格式不正确、权限问题等。良好的错误处理机制能提高程序的健壮性。 8. **版本兼容性**: 不同版本的Excel文件格式可能略有不同,需要...
总之,“兼容office2007的生成和读取jar包”提供了一种Java编程环境下处理XLSX文件的解决方案,通过引入和使用Execl.jar,开发者可以方便地在Java程序中创建、读取和修改Excel 2007及更高版本的文件。
总的来说,“execl依赖包”是开发中不可或缺的工具,能够帮助我们轻松地与Excel文件进行交互。正确选择和使用这些包,能够提高开发效率,同时确保数据导出的准确性和稳定性。在导入这些依赖包后,根据项目的具体需求...
Excel文件本身并不直接支持转换为图片格式,但可以通过转换为PDF,然后再将PDF转换为图片的方式来间接实现。这是因为PDF能精确地保留原始Excel的样式和布局,而许多库已经实现了从PDF到图片的转换。 该工具包的核心...
这个“POI操作Excel相关JAR包”是针对3.7版本的,它兼容Excel2003(.xls格式)和Excel2007(.xlsx格式)。 1. **POI框架介绍**: POI项目由Apache软件基金会维护,最初由Gnumeric项目开发,用于读取和写入...
- **兼容支持**:支持Excel 97-2003和OpenOffice,但不支持新的Excel 2007 .xlsx OOXML文件格式。 - **开发难度**:较高。 - **部署难度**:无特殊要求。 - **备注**:基于POI 3.2版本。 Jxls是基于POI的一个扩展...
10. **兼容性测试**:确保导出的Excel文件能在不同的设备和Excel版本中正确打开和显示。 以上就是Android应用将数据导出到Excel文件的基本步骤和关键知识点。需要注意的是,实际项目中可能会遇到各种问题,如权限、...
在JavaScript(简称JS)环境中,读取Excel数据内容通常涉及到使用一些特定的库或插件,因为原生的JS并不支持直接操作二进制文件如Excel(.xlsx或.xls)格式。在给定的场景中,提到的是一个名为"jqueryExcel"的插件,...
- `java.io.File`:提供对文件或目录路径名的操作。 - `java.io.FileInputStream`:用于从文件系统中的某个文件中获取字节输入流。 - `javax.servlet.ServletOutputStream`:Servlet 容器提供的输出流,用于向...
在Java开发中,经常需要处理Excel文件的导入与导出工作。本篇文章介绍一个简单易用的Excel导出工具类——`ExcelUtil`,该工具类能够帮助开发者快速实现Excel文件的导出功能。 根据给定的文件信息,“这是一个Excel...
总的来说,Java Android POI 3.8是Android开发中处理Excel文件不可或缺的工具,尤其对于那些需要从服务器获取数据并以Excel格式展示,或者需要用户在移动设备上填写和保存Excel表格的应用来说,它提供了强大的功能和...
7. **兼容性问题:** - 考虑到不同浏览器的兼容性,可能需要使用`FileSaver.js`这样的库来处理文件保存。 通过以上方法,你可以实现Echarts报表数据到Excel的导出。这个过程涉及到前端交互设计、数据处理、文件...
10. **版本更新**:“3.8”版本可能包括了对新Excel文件格式的支持、性能提升和其他改进,确保与最新Excel版本兼容。 通过libxl3.8,开发者可以轻松地在各种项目中实现高效、可靠的Excel文件操作,无论是在数据分析...
在Android环境下使用Apache POI需要解决几个挑战,因为Android系统默认不包含对Java API的全面支持,特别是那些与二进制流和文件操作相关的部分。这通常需要借助像Android-POI这样的适配器库来实现。 以下是使用...