POI 读取excel

POI 读取excel,第1张

直接上源码:

package edusjtuerplabpoi;

import javaioFileInputStream;

import javaioFileNotFoundException;

import javaioIOException;

import javaioInputStream;

import javatextSimpleDateFormat;

import javautilDate;

import javautilHashMap;

import javautilMap;

import orgapachepoihssfusermodelHSSFCell;

import orgapachepoihssfusermodelHSSFDateUtil;

import orgapachepoihssfusermodelHSSFRow;

import orgapachepoihssfusermodelHSSFSheet;

import orgapachepoihssfusermodelHSSFWorkbook;

import orgapachepoipoifsfilesystemPOIFSFileSystem;

/

*** 作Excel表格的功能类

/

public class ExcelReader {

private POIFSFileSystem fs;

private HSSFWorkbook wb;

private HSSFSheet sheet;

private HSSFRow row;

/

读取Excel表格表头的内容

@param InputStream

@return String 表头内容的数组

/

public String[] readExcelTitle(InputStream is) {

try {

fs = new POIFSFileSystem(is);

wb = new HSSFWorkbook(fs);

} catch (IOException e) {

eprintStackTrace();

}

sheet = wbgetSheetAt(0);

row = sheetgetRow(0);

// 标题总列数

int colNum = rowgetPhysicalNumberOfCells();

Systemoutprintln("colNum:" + colNum);

String[] title = new String[colNum];

for (int i = 0; i < colNum; i++) {

//title[i] = getStringCellValue(rowgetCell((short) i));

title[i] = getCellFormatValue(rowgetCell((short) i));

}

return title;

}

/

读取Excel数据内容

@param InputStream

@return Map 包含单元格数据内容的Map对象

/

public Map<Integer, String> readExcelContent(InputStream is) {

Map<Integer, String> content = new HashMap<Integer, String>();

String str = "";

try {

fs = new POIFSFileSystem(is);

wb = new HSSFWorkbook(fs);

} catch (IOException e) {

eprintStackTrace();

}

sheet = wbgetSheetAt(0);

// 得到总行数

int rowNum = sheetgetLastRowNum();

row = sheetgetRow(0);

int colNum = rowgetPhysicalNumberOfCells();

// 正文内容应该从第二行开始,第一行为表头的标题

for (int i = 1; i <= rowNum; i++) {

row = sheetgetRow(i);

int j = 0;

while (j < colNum) {

// 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据

// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean

// str += getStringCellValue(rowgetCell((short) j))trim() +

// "-";

str += getCellFormatValue(rowgetCell((short) j))trim() + " ";

j++;

}

contentput(i, str);

str = "";

}

return content;

}

/

获取单元格数据内容为字符串类型的数据

@param cell Excel单元格

@return String 单元格数据内容

/

private String getStringCellValue(HSSFCell cell) {

String strCell = "";

switch (cellgetCellType()) {

case HSSFCellCELL_TYPE_STRING:

strCell = cellgetStringCellValue();

break;

case HSSFCellCELL_TYPE_NUMERIC:

strCell = StringvalueOf(cellgetNumericCellValue());

break;

case HSSFCellCELL_TYPE_BOOLEAN:

strCell = StringvalueOf(cellgetBooleanCellValue());

break;

case HSSFCellCELL_TYPE_BLANK:

strCell = "";

break;

default:

strCell = "";

break;

}

if (strCellequals("") || strCell == null) {

return "";

}

if (cell == null) {

return "";

}

return strCell;

}

/

获取单元格数据内容为日期类型的数据

@param cell

Excel单元格

@return String 单元格数据内容

/

private String getDateCellValue(HSSFCell cell) {

String result = "";

try {

int cellType = cellgetCellType();

if (cellType == HSSFCellCELL_TYPE_NUMERIC) {

Date date = cellgetDateCellValue();

result = (dategetYear() + 1900) + "-" + (dategetMonth() + 1)

+ "-" + dategetDate();

} else if (cellType == HSSFCellCELL_TYPE_STRING) {

String date = getStringCellValue(cell);

result = datereplaceAll("[年月]", "-")replace("日", "")trim();

} else if (cellType == HSSFCellCELL_TYPE_BLANK) {

result = "";

}

} catch (Exception e) {

Systemoutprintln("日期格式不正确!");

eprintStackTrace();

}

return result;

}

/

根据HSSFCell类型设置数据

@param cell

@return

/

private String getCellFormatValue(HSSFCell cell) {

String cellvalue = "";

if (cell != null) {

// 判断当前Cell的Type

switch (cellgetCellType()) {

// 如果当前Cell的Type为NUMERIC

case HSSFCellCELL_TYPE_NUMERIC:

case HSSFCellCELL_TYPE_FORMULA: {

// 判断当前的cell是否为Date

if (HSSFDateUtilisCellDateFormatted(cell)) {

// 如果是Date类型则,转化为Data格式

//方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00

//cellvalue = cellgetDateCellValue()toLocaleString();

//方法2:这样子的data格式是不带带时分秒的:2011-10-12

Date date = cellgetDateCellValue();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

cellvalue = sdfformat(date);

}

// 如果是纯数字

else {

// 取得当前Cell的数值

cellvalue = StringvalueOf(cellgetNumericCellValue());

}

break;

}

// 如果当前Cell的Type为STRIN

case HSSFCellCELL_TYPE_STRING:

// 取得当前的Cell字符串

cellvalue = cellgetRichStringCellValue()getString();

break;

// 默认的Cell值

default:

cellvalue = " ";

}

} else {

cellvalue = "";

}

return cellvalue;

}

public static void main(String[] args) {

try {

// 对读取Excel表格标题测试

InputStream is = new FileInputStream("d:\\test2xls");

ExcelReader excelReader = new ExcelReader();

String[] title = excelReaderreadExcelTitle(is);

Systemoutprintln("获得Excel表格的标题:");

for (String s : title) {

Systemoutprint(s + " ");

}

// 对读取Excel表格内容测试

InputStream is2 = new FileInputStream("d:\\test2xls");

Map<Integer, String> map = excelReaderreadExcelContent(is2);

Systemoutprintln("获得Excel表格的内容:");

for (int i = 1; i <= mapsize(); i++) {

Systemoutprintln(mapget(i));

}

} catch (FileNotFoundException e) {

Systemoutprintln("未找到指定路径的文件!");

eprintStackTrace();

}

}

}

百度地图SDK提供三种类型的POI检索:城市内检索、周边检索和区域检索(即矩形区域检索)

跟搜索有关的类

PoiSearch 它内部有几个方法

searchInCity( PoiCitySearchOption option)

城市内检索 V432版本后(包含V432版本),该方法要在Listener设置方法  setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener)  之后执行,否则会在某些场景出现拿不到回调结果的情况

searchInBound ( PoiBoundSearchOption option)

范围内检索 V432版本后(包含V432版本),该方法要在Listener设置方法  setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener)  之后执行,否则会在某些场景出现拿不到回调结果的情况

searchNearby( PoiNearbySearchOption option)

周边检索 V432版本后(包含V432版本),该方法要在Listener设置方法 setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener) 之后执行,否则会在某些场景出现拿不到回调结果的情况

boolean searchPoiIndoor ( PoiIndoorOption option)

POI 室内检索 V432版本后(包含V432版本),该方法要在Listener设置方法  setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener)  之后执行,否则会在某些场景出现拿不到回调结果的情况

经过上面四种检索之后

searchPoiDetail ( PoiDetailSearchOption option)

POI 详情检索 V432版本后(包含V432版本),该方法要在Listener设置方法  setOnGetPoiSearchResultListener(OnGetPoiSearchResultListener)  之后执行,否则会在某些场景出现拿不到回调结果的情况

设置检索监听

@Override // 查询结果回调

public void onGetPoiResult(PoiResult poiResult) {

Loge(TAG,"onGetPoiResult");

}

@Override //被onGetPoiDetailResult替代

public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {

Loge(TAG,"onGetPoiDetailResult");

}

@Override //用于返回详细检索结果

public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {

Loge(TAG,"onGetPoiDetailResult");

}

@Override //室内检索结果回调

public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

Loge(TAG,"onGetPoiIndoorResult");

}

mPoiSearchsearchInCity(new PoiCitySearchOption()

city("杭州")//必填

        keyword("工商银行")//必填

        pageNum(10));

我们进行城市检索,会回调到onGetPoiResult()里面

@Override // 查询结果回调

    public void onGetPoiResult(PoiResult poiResult) {

List poiInfos=poiResultgetAllPoi();

        PoiInfo poi = poiResultgetAllPoi()get(0);

//通过第一条检索信息对应的uid发起详细信息检索

        mPoiSearchsearchPoiDetail((new PoiDetailSearchOption())poiUid(poiuid));

        Loge(TAG,"onGetPoiResult");

    }

然后我们可以在里面对查询的到某一条信息进行详情信息检索,这次查到的信息会回调到

@Override

public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {

Loge(TAG,"onGetPoiDetailResult");

}

比如我这里查询到的第一条数据是

然后详细信息

周边检索是在一个圆形范围内的POI检索,适用于以某个位置为中心点,自定义搜索半径,搜索某个位置附近的POI。

设置SearchOption,发起周边检索请求示例如下:

mPoiSearchsearchNearby(new PoiNearbySearchOption() location(new LatLng(39915446, 116403869)) radius(100) keyword("餐厅") );

这里的radius就是设置以搜索点位圆心,的半径长度,这里半径长度是100米

我们一般是已自己所在位置为圆心,搜索附近5公里以内的商家

POI区域检索,即“在由开发者指定的西南角和东北角组成的矩形区域内的POI检索”。

设置PoiBoundsSearchOptions,发起检索请求示例如下:

/

设置矩形检索区域

/LatLngBounds searchBounds = new LatLngBoundsBuilder()       

 include(new LatLng( 3992235, 116380338 ))      

  include(new LatLng( 39947246, 116414977))     

   build();/

在searchBounds区域内检索餐厅

/mPoiSearchsearchInBound(new PoiBoundSearchOption()   bound(searchBounds)        keyword("餐厅"));

1、实现日期格式的方法代码。

2、实现保留三位小数格式的方法代码。

3、实现货币格式的方法代码。

4、实现百分比格式的方法代码。

4、实现中文大写格式的方法代码。

注意事项:

Excel虽然提供了大量的用户界面特性,但它仍然保留了第一款电子制表软件VisiCalc的特性:行、列组成单元格,数据、与数据相关的公式或者对其他单元格的绝对引用保存在单元格中。

以上就是关于POI 读取excel全部的内容,包括:POI 读取excel、(8)POI检索、poi读取Excel时,如果单元格设置的是数字格式,如何解决整数与小数问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9875964.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存