HBase通过Excel导入数据

package Common;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.*;

/**
 *
 * @author LFF
 * @version 0.5 Excel文件操作帮助类
 *
 */
public class ExcelPOIHelper {

    // D盘建一个空的workbook.xls文件
    public static void Create(String path, String name) {
        Workbook wb = new HSSFWorkbook();
        FileOutputStream fileOut;
        try {
            fileOut = new FileOutputStream("D:/workbook.xls");
            wb.write(fileOut);
            fileOut.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 取出Excel所有工作簿名
     *
     * @param fullPath
     *            Excel文件完整地址("D:/workbook.xls")
     * @return 工作簿名列表
     */
    public static List<String> GetSheets(String fullPath) {
        List<String> result = new ArrayList<String>();
        try {
            FileInputStream file = new FileInputStream(fullPath);
            POIFSFileSystem ts = new POIFSFileSystem(file);
            Workbook workbook = new HSSFWorkbook(ts);
            for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
                String sheetName = workbook.getSheetName(i);
                result.add(i, sheetName);
            }
            file.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 取工作簿中所有的行
     *
     * @param fullPath
     *            Excel文件完整地址("D:/workbook.xls")
     * @param sheetName
     *            工作簿名
     * @return 键值对:<RowKey,<ColumnName, Value>>
     */
    public static Map<String, List<Map<String, String>>> GetRows(
            String fullPath, String sheetName) {
        Map<String, List<Map<String, String>>> resultRow = new HashMap<String, List<Map<String, String>>>();
        List<Map<String, String>> resultCells;
        Map<String, String> resultCell;
        try {
            FileInputStream file = new FileInputStream(fullPath);
            POIFSFileSystem ts = new POIFSFileSystem(file);
            Workbook workbook = new HSSFWorkbook(ts);
            Sheet sheet = workbook.getSheet(sheetName);

            int rowCounts = sheet.getPhysicalNumberOfRows();// 行数
            int columnCounts = sheet.getRow(0).getPhysicalNumberOfCells(); // 列数

            for (int i = 1; i < rowCounts; i++) {
                Row row = sheet.getRow(i);// 循环取第一行之后的每一行
                row.getCell(0).setCellType(Cell.CELL_TYPE_STRING);

                resultCells = new ArrayList<Map<String, String>>();
                resultCell = new HashMap<String, String>();

                String rowKey = row.getCell(0).toString();

                for (int j = 1; j < columnCounts; j++) {
                    Cell cell = row.getCell(j);// 循环取第一列之后的每一列
                    if (null != cell) {
                        cell.setCellType(Cell.CELL_TYPE_STRING);

                        String columnName = sheet.getRow(0).getCell(j)
                                .toString();
                        String cellValue = cell.toString();

                        resultCell.put(columnName, cellValue);
                    }
                }
                resultCells.add(resultCell);
                resultRow.put(rowKey, resultCells);
            }
            file.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return resultRow;
    }
}

取出方式

public static void main(String[] agrs) {
        String fullPath = "C:/Users/LFF/Desktop/HBase导入模版.xls";
        // temp = ExcelPOIHelper.GetSheets(fullPath); // 取所有工作簿表名
        String sheetName = "User-Info";

        String tbName = sheetName.split("-")[0];
        String tbCF = sheetName.split("-")[1];

        Map<String, List<Map<String, String>>> rows = new HashMap<String, List<Map<String, String>>>();

        rows = ExcelPOIHelper.GetRows(fullPath, sheetName);

        Iterator rowIterator = rows.entrySet().iterator();
        while (rowIterator.hasNext()) {
            Entry rowEntry = (Entry) rowIterator.next();
            Object rowKey = rowEntry.getKey();
            Object cellsValue = rowEntry.getValue();
            // System.out.println(rowKey);
            // System.out.println(cellsValue);

            List<Map<String, String>> cells = new ArrayList<Map<String, String>>();
            cells = (List<Map<String, String>>) cellsValue;
            Iterator<Map<String, String>> it = cells.iterator();
            while (it.hasNext()) {
                Object cellObject = it.next();

                Map<String, String> cell = new HashMap<String, String>();
                cell = (HashMap<String, String>) cellObject;

                Iterator cellIterator = cell.entrySet().iterator();
                while (cellIterator.hasNext()) {
                    Entry cellEntry = (Entry) cellIterator.next();
                    Object cellColumn = cellEntry.getKey();
                    Object value = cellEntry.getValue();

                    String strCellColumn = cellColumn.toString();
                    String columnName = strCellColumn.split("<")[0];
                    String valueType = strCellColumn.substring(
                            strCellColumn.indexOf("<") + 1,
                            strCellColumn.lastIndexOf(">"));

                    System.out
                            .println(String
                                    .format("存储在表[%s]的列族[%s]中行键为[%s]的[%s]列中的值为[%s](类型为[%s])",
                                            tbName, tbCF, rowKey, columnName,
                                            value, valueType));

                    Add(tbName, tbCF, rowKey.toString(), columnName, value.toString());

                }
            }
        }

需要加入poi-3.10.1-20140818.jar包,下载在http://poi.apache.org/download.html。

时间: 2025-01-18 09:05:12

HBase通过Excel导入数据的相关文章

技巧一:Delphi XE3 Excel导入数据到StringGrid

procedure TDataEditDrFrm.btn8Click(Sender: TObject);varexcelx,excely:string;ExcelApp:Variant;workBook:OleVariant;excelRowCount,excelColumnCount:longint;i,j,row,row1:integer; begin row1:=1; pb1.Min:=0; dlgOpen1.Filter:='Excel文件|*.xls|*.xlsx'; if dlgOp

Excel导入数据到Sql server 中出错:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”

从Excel导入数据到Sql server 时,由于表中的数据有的很长,导入时出现如下错误(如果数据不是很长,255内以内,则不会出现错误): 出错原因: SQL Server的导入导出为了确定数据表的每个字段类型,取excel表的每个字段的前几行(3行即可)来判别.如果前3条是少于255的字符串,则设成nvarchar(255)类型,所以,当如果第四条或更后的数据的字符数大于255,则会报错. 解决方法: 在导入数据前,可以手动加几条无关的数据,让字段的字符数大于255,则导入时SQL Ser

Kettle Excel导入数据到数据库

最近学习大数据的处理,由于项目开发的需要,使用一种简单的方式来将Excel中的数据导入到数据库中,开发使用的kettle工具. kettle工具安装很简单,从官网上下载下来之后,直接解压到制定的盘符下即可(前提是你配置了JAVA的环境变量,path,classpath). 在WINDOWS环境下双击Spoon.bat文件,出现如下图: 点击如图所示的图标,进行本地文件导入的配置 选择红色线框下的选项,点击确定 按照上面的操作,点击确定即可. 直接点击关闭即可. 通过上面两个地方的任意一个都可以创

Dynamics CRM EXCEL导入数据字段类型为选项集时的注意事项

在开始先展示下CRM的导入数据涉及选项集字段时的一个问题 下图是选项集字段的属性 下图是我要导入的excel中的列值,可以看出列明和字段名是一致的,而列值却不是选项集中已有的选项 在导入校验时,只要字段名对上了,选项集字段并未报任何警告提醒 导入成功后针对excel中的列值在选项集中没有的,系统会自动创建 这是一个麻烦,所以怎样才能避免这个问题,或者说在excel中的列值和选项集字段对不上时如何能有个提醒,下面来说解决办法 将前面导入的excel的列明更改下和系统选项集字段的属性名不同,再对列值

《.NET学习笔记》——使用NPOI读取Excel导入数据和导出Excel的功能

前提:由于有差不多两年时间没有进行B/S项目开发了,换了新工作,项目中要求有Excel导入数据库的功能,故保存下来供以后查看. 一.使用jQuery的uploadify插件完成选择文件并上传的功能: (1)先引入相关文件: <script src="../Scripts/uploadify/swfobject.js" type="text/javascript"></script> <link href="../Scripts

MVC3 Excel导入数据到sql Server数据库

MVC Excel导入到数据库,我们客户有一个固定的Excel,每个月都让我手动录入到库内(一开始不会SQL的导入)一两次我还好,蛮乐意的后来多了,我就使用了SQL自带的导入,可是每个月都这样,就太恶心了,为了凸显我是一个程序员,我跟项目经理提出,做一个页面上传Excel文件的页面,然后保存到数据库,让客户上传,天天上传都可以,不要每个月找我一次,而且客户还是个女的,最让我不开心的是她还那么土,然后项目经理说既然是你想出来的,那么你就自己写,我化石了,则个则.............ge.我是一

实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多都是以json数据填充的.在导入excel填充json数据到页面时,真的让我差点吐血了.在做这个导入导出的时候,那一个礼拜都是黑暗的. 好了,废话不多说了,我今天就给大家展示这个两个功能的核心点,excel生成json数据和json数据生成excel文件. 一:从上传文件到服务器,后台java解析,

Asp.NET Excel导入数据返回JSON字符

前端创建ID为ExcelDy的一个按钮 以及 一个有导入按钮的窗体 <a id="ExcelDy" class="left disabled" href="javascript:void(0)"><span> <img alt='' src='../images/primeval/import.bmp' /></span>导入入库</a> <span class="lef

Kettle从excel导入数据到sql server

从excel工作表中读取数据逐行执行insert语句插入到sqlserver 为了简单起见只选取了三个个字段作为参数,日期,字符类型的需要加上'' 执行结果如下: