如何用apachepoi作excel文件

returnArray[i] = (String[]) result.get(i);opcode: 09h is BOF;

POI是Apache下的一个项目,是用Ja编写的开源框架,提供API供开发者直接作Microsoft Off(Excel,Word,PowerPoint...)

读取excel_读取excel的数据读取excel_读取excel的数据


读取excel_读取excel的数据


POI为我们带来了什么?

在很多的企业当中,储蓄数据是使用Excel文档的,因为Excel文档的格式方便,也能套用公式,而企业程序是存储在数据库当中,这样就需要一种两者之间互相转换的方法,当企业刚开始使用信息化的管理系统时,也需要将Excel的数据录入到程序当中,这种需求是非常普遍的.

POI使用:

首先增加Men的依赖

org.apache.poi

poi

3.8

org.apache.poi

poi-ooxml

3.8

org.apache.poi

poi-ooxml-schemas

3.8

org.apache.poi

3.8

以下为作Excel的测试类

package com.accentrix.ray;

import ja.io.FileOutputStream;

import ja.io.IOException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.usermodel.WorkbookFactory;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.junit.Before;

import org.junit.Test;

public class TestExcel {

private Workbook workbook;

/

由于Excel当中的单元格Cell存在类型,若获取类型错误 就会产生错误,

所以通过此方法将Cell内容全部转换为String类型

/

private String getCellValue(Cell cell) {

String str = null;

switch (cell.getCellType()) {

case Cell.CELL_TYPE_BLANK:

str = "";

case Cell.CELL_TYPE_BOOLEAN:

str = String.valueOf(cell.getBooleanCellValue());

case Cell.CELL_TYPE_FORMULA:

str = String.valueOf(cell.getCellFormula());

case Cell.CELL_TYPE_NUMERIC:

str = String.valueOf(cell.getNumericCellValue());

case Cell.CELL_TYPE_STRING:

str = String.valueOf(cell.getStringCellValue());

default:

str = null;

}return str;

}@Before

public void setUp() throws InvalidFormatException, IOException {

// 加载excel文件,自动判断是HSSF还是XSSF

workbook = WorkbookFactory.create(new File("E:/.xls"));

读取一个已存在的Excel

/

@Test

public void testReadExcel() throws InvalidFormatException, IOException {

// 获取个工作目录,下标从0开始

Sheet sheet = workbook.getSheetAt(0);

// 获取该工作目录一行的行数

int lastRowNum = sheet.getLastRowNum();

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

// 获取下标为i的行

// 获取该行单元格个数

int lastCellNum = row.getLastCellNum();

for (int j = 0; j < lastCellNum; j++) {

// 获取下标为j的单元格

Cell cell = row.getCell(j);

// 调用获取方法

String cellValue = this.getCellValue(cell);

使用Foreach方式读取Excel

/

@Test

public void testForeachReadExcel() {

// 根据sheet的名字获取

Sheet sheet = workbook.getSheet("test");

// 处了上面testReadExcel的方式读取以外,还支持foreach的方式读取

for (Row row : sheet) {

for (Cell cell : row) {

String cellValue = this.getCellValue(cell);

System.out.println(cellValue);

创建简单的Excel

/

@Test

public void testWriteExcel() throws IOException {

// 创建一个XSSF的Excel文件

workbook = new XSSFWorkbook();

// 创建名称为test的工作目录

Sheet sheet = workbook.createSheet("test");

/

创建1个10行x10列的工作目录

/

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

// 创建一行

Row row = sheet.createRow(i);

for (int j = 0; j < 10; j++) {

// 创建一个单元格

Cell cell = row.createCell(j);

// 设置单元格value

cell.setCellValue("test");

// 此处为设置Excel的样式,设置单元格内容居中,

// 但这样设置方式并不常用,请留意下面的方法

CellStyle cs = workbook.createCellStyle();

cs.setAlignment(CellStyle.ALIGN_CENTER);

cell.setCellStyle(cs);

// 将Excel写出到文件流

workbook.write(fos);

matlab读取excel数据

FileOutputpoi-scratchpadStream fos = new FileOutputStream("E:/test.xlsx");

matlab读取excel数据方法如下:

作设备:戴尔灵越5000。

设备系统:win10。

作软件:matlab2020b。

1、首先打开matlab软件,点击【新建】-【脚本】。

2、在脚本中输入代码A=xlsread('C:UsersAdministratorDesktoptest.xlsx'),点击【运行】。

3、双击工作区中的结果。

4、可以看到excel文件读取成功。

excel发现不可读取的内容如何解决

读取指定单元格中的数据

1、种解决方案

(1)单击是,通过修复或删除不可读取的内容,Excel已经能够打开该文件,下方就是出错的行列。

(2)将xlsx文件修改扩展名,改为zip压缩文件。

(3)双击zip文件,打开看看,注意,这里不是解压,打开sharedStrings.xml文件,自动弹出浏览器,无法显示XML网页。

(4)原来是标红色的部分显示si和t标签出错了,查看Row row = sheet.getRow(i);源代码。保存,然后扩展名改为xlsx,即可解决故障了。

2、第二种解决方案

(1)打开控制面板--卸载程序,查看off是否存在。

(3)重新打开文件,恢复正常。

VB 如何读取 Excel 所有列和行

import ja.io.File;

代码中已经写好}}了呀:

Selection.Rows.Count '行数

Selection.Columns.Count '列数

即 起始行 + 总行数 - 1 为 结束行,

...

C++ 程序能不能读取 excel 的文件?

BOF record

| Record Header | Record Body |

Byte | 0 1 2 3 | 0 1 2 3 |

-----------------------------------------

Contents | 09 | 00 | 04 | 00 | 02 | 00 | 10 | 00 |

-----------------------------------------

| opcode | length | version | file |

| | | number | type |

记录头:

记录体:

version number:02h is version number (2 for the initial version of Excel)

file type:10h is a worksheet file;

具体可参考MS}/ Excel File Format。

描述

以下是对本文程序简单描述。

步:打开文件

CFile f;

CFileException e;

// 打开文件

if (!f.Open("D:Book1.xls", CFile::modeRead, &e))

{TCHAR szError[1024];

e.GetErrorMessage(szError, 1024);

AfxMessageBox(szError);

return;

}第二步:读取版本号

// 读取版本

while (dwPos < dwLen)

{nRead = f.Read((void)&RecNo, 2);

if (RecNo == XL_BOF)

{WORD Ver, Type;

f.Read((void)&RecLen, 2);

f.Read((void)&Ver, 2);

f.Read((void)&Type, 2);

f.Seek(RecLen, CFile::current);

int ver = 0;

switch (Ver)

{case BIFF7:

ver = 7;

case BIFF8:

ver = 8;

AfxMessageBox("Biff8");

}int type = 0;

switch (Type)

{case WORKBOOK:

type = 5;

AfxMessageBox("Workbook");

case WORKSHEET:

type = 16;

AfxMessageBox("Worksheet");

case CHART:

type = 32;

AfxMessageBox("Chart");

}break;

}dwPos = f.GetPosition();

}第三步:读其它数据

f.SeekToBegin();

dwPos = f.GetPosition();

// 读表格数据

while (dwPos < dwLen)

{nRead = f.Read((void)&RecNo, 2);

switch (RecNo)

{case XL_BOF:

{f.Read((void)&RecLen, 2);

AfxMessageBox("Bof");

}break;

case XL_BOUNDSHEET:

{DWORD temp;

BYTE visi;

BYTE type;

TCHAR name;

f.Read((void)&RecLen, 2);

f.Read((void)&temp, 4);

f.Read((void)&visi, 1);

f.Read((void)&type, 1);

f.Read((void)&StrLen, 2);

f.Read((void)&name, StrLen);

char buf[128];

memset(buf, 0x0, 128cell = row.getCell(columnIndex););

strncpy(buf, &name, StrLen);

AfxMessageBox(buf);

}break;

case XL_DIMENSION:

f.Read((void)&RecLen, 2);

f.Seek(RecLen, CFile::current);

AfxMessageBox("Dimension");

case 0xE2: // INTERFACED

f.Read((void)&RecLen, 2);

AfxMessageBox("e2");

case XL_SST:

f.Read((void)&RecLen, 2);

f.Seek(RecLen, CFile::current);

AfxMessageBox("SST");

case XL_NUMBER:

f.Read((void)&RecLen, 2);

AfxMessageBox("Number");

case XL_STRING:

f.Read((void)&RecLen, 2);

AfxMessageBox("String");

case XL_RK:

f.Read((void)&RecLen, 2);

case XL_LABEL:

{f.Read((void)&RecLen, 2);

AfxMessageBox("Label");

}break;

case 0xD6:

f.Read((void)&RecLen, 2);

AfxMessageBox("RString");

case XL_EOF:

dwPos = dwLen;

AfxMessageBox("Eof");

default:

nRead = f.Read((void)&RecLen, 2);

if (nRead == 0)

dwPos = dwLen;

第四步:关闭文件

f.Close();

C#怎样用excel.dll读取excel文件

Set rg2 = Sheets("问16结果").[d11]

Microsoft.Off.Interop.Excel.dll 用起来十分不方便,需要安装Excel, 配置起来麻烦。可以试试Spire.XLS这个库,作简单,且有丰富的中文教程:

AfxMessageBox("RK");

如何从excel中读取数据

VLOOKUP是一个查找函数,给定一个查找的目标,它就能从指定的查找区域中查找返回想要查找到的值。它的基本语法为:

VLOOKUP(查找目标,查找范围,返回值的列数,OR模糊查找)

下面以一个实例来介绍一下这四个参数的使用

例1:如下图所示,要求根据表二中的姓名,查找姓名所对应的年龄。

公式:B13 =VLOOKUP(A13,$B$2:$D$8,3,0)

参数说明:

1 查找目标:就是你指定的查找的内容或单元格引用。本例中表二A列的姓名就是查找目标。我们要根据表二的“姓名”在表一中A列进行查找。

公式:B13 =VLOOKUP(A13,$B$2:$D$8,3,0)

2 查找范围(VLOOKUP(A13,$B$2:$D$8,3,0) ):指定了查找目标,如果没有说从哪里查找,EXCEL肯定会很为难。所以下一步我们就要指定从哪个范围中进行查找。VLOOKUP的这第二个参数可以从一个单元格区域中查找,也可以从一个常量数组或内存数组中查找。本例中要从表一中进行查找,那么范围我们要怎么指定呢?这里也是极易出错的地方。大家一定要注意,给定的第二个参数查找范围要符合以下条件才不会出错:

A 查找目标一定要在该区域的列。本例中查找表二的姓名,那么姓名所对应的表一的姓名列,那么表一的姓名列(列)一定要是查找区域的列。象本例中,给定的区域要从第二列开始,即$B$2:$D$8,而不能是$A$2:$D$8。因为查找的“姓名”不在$A$2:$D$8区域的列。

B 该区域中一定要包含要返回值所在的列,本例中要返回的值是年龄。年龄列(表一的D列)一定要包括在这个范围内,即:$B$2:$D$8,如果写成$B$2:$C$8就是错的。

3 返回值的列数(B13 =VLOOKUP(A13,$B$2:$D$8,3,0))。这是VLOOKUP第3个参数。它是一个整数值。它怎么得来的呢。它是“返回值”在第二个参数给定的区域中的列数。本例中我们要返回的是“年龄”,它是第二个参数查找范围$B$2:$D$8的第3列。这里一定要注意,列数不是在工作表中的列数(不是第4列),而是在查找范围区域的第几列。如果本例中要是查找姓名所对应的性别,第3个参数的值应该设置为多少呢。是2。因为性别在$B$2:$D$8的第2列中。

4 OR模糊查找(VLOOKUP(A13,$B$2:$D$8,3,0) ),一个参数是决定函数和模糊查找的关键。即完全一样,模糊即包含的意思。第4个参数如果指定值是0或FALSE就表示查找,而值为1 或TRUE时则表示模糊。这里兰色提醒大家切记切记,在使用VLOOKUP时千万不要把这个参数给漏掉了,如果缺少这个参数默为值为模糊查找,我们就无法查找到结果了。

1、接下来,我们的任务是通过利用VLOOKUP函数来实现查找同学C的成绩。为此在单元格中输入“=VLOOKUP”,此时就会发现VLOOKlength: 04h record body is 4 bytes long;UP包括三个参数和一个可选参数。

其中“lookup_value”是指要查找的值。

参数“table_array”是指搜索的区域,在此在除标题之后的整个数据区域。

第三个参数“col_index_num”是指整个函数返回单元格所在的列号。

2、以右括号结尾,并按回车键,就出现想要的结果啦。

ja程序把excel里面的数据读出来,并且插入到数据表中。

给你个例子 需要poi.jar

import ja.io.BufferedInputStream;

import ja.io.FileInputStream;

import ja.io.FileNotFoundException;

import ja.io.IOException;

import ja.text.DecimalFormat;

import ja.text.SimpleDateFormat;

import ja.util.ArrayList;

} else {import ja.util.Arrays;

import ja.util.DaCells(i,5)=b.a5te;

import ja.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;

importorg.apache.poi.hssf.usermodel.HSSFDateUtil;

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.file.POIFSFileSystem;

public class ExcelOperate {

public static void main(String[] args) throws Exception {

File file = new File("ExcelDemo.xls");

String[][] result = getData(file, 1);

int rowLength = result.length;

for(int i=0;i

for(int j=0;j

System.out.print(result[i][j]+"tt");

}System.out.println();

/

读取Excel的内容,维数组存储的是一行中格列的值,二维数组存储的是多少个行

@param file 读取数据的源Excel

@param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1

@return 读出的Excel中数据的内容

@throws FileNotFoundException

@throws IOException

/

public static String[][] getData(File file, int ignoreRows)

throws FileNotFoundException, IOException {

List result = new ArrayList();

int rowSize = 0;

BufferedInputStream in = new BufferedInputStream(new FileInputStream(

file));

// 打开HSSFWorkbook

POIFSFileSystem fs = new POIFSFileSystem(in);

HSSFWorkbook wb = new HSSFWorkbook(fs);

HSSFCell cell = null;

for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {

HSSFSheet st = wb.getSheetAt(sheetIndex);

// 行为标题,不取

for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {

HSSFRow row = st.getRow(rowIndex);

if (row == null) {

continue;

}int tempRowSize = row.getLastCellNum() + 1;

if (tempRowSize > rowSize) {

rowSize = tempRowSize;

}String[] values = new String[rowSize];

Arrays.fill(values, "");

boolean hasValue = false;

for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {

String value = "";

if (cell != null) {

// 注意:一定要设成这个,否则可能会出现乱码

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:

value = cell.getStringCellValue();

case HSSFCell.CELL_TYPE_NUMERIC:

if (HSSFDateUtil.isCellDateFormatted(cell)) {

if (date != null) {

value = new SimpleDateFormat("yyyy-MM-dd")

.format(date);

value = "";

}} else {

value = new DecimalFormat("0").format(cell

.getNumericCellValue());

}break;

case HSSFCell.CELL_TYPE_FORMULA:

// 导入时如果为公式生成的数据则无值

if (!cell.getStringCellValue().equals("")) {

value = cell.getStringCellValue();

value = cell.getNumericCellValue() + "";

}break;

case HSSFCell.CELL_TYPE_BLANK:

case HSSFCell.CELL_TYPE_ERROR:

value = "";

value = (cell.getBooleanCellValue() == true ? "Y"

: "N");

default:

value = "";

if (columnIndex == 0 && value.trim().equals("")) {

}values[columnIndex] = rightTrim(value);

hasValue = true;

}if (hasValue) {

result.add(values);

}in.close();

String[][] returnArray = new String[result.size()][rowSize];

for (int i = 0; i < returnArray.length; i++) {

}return returnArray;

}/

去掉字符串右边的空格

@param str 要处理的字符串

@return 处理后的字符串

/

public static String rightTrim(String str) {

if (str == null) {

return "";

}int length = str.length();

for (int i = length - 1; i >= 0; i--) {

if (str.charAt(i) != 0x20) {

}length--;

}return str.substring(0, length);

如何读取excel中的文本文件

break;

使用以下代码即可实现:

Sub test()

Dim reg As Object

Dim wjm As String

Set reg = CreateObject("vbscript.regexp")

.Global = True

.Pattern = "{""id"".?}"

End With

wjm = Dir(ThisWorkbook.Path & ".txt")

m = 2

Do While wjm <> ""

txtm = ThisWorkbook.Path & "" & wjm

Open txtm For Input As #1

Line Input #1, ss

If Left(Trim(ss), 4) = "list" Then

ss = Replace(ss, Chr(13), Chr(10) & Chr(13))

Set mathcs = reg.Execute(ss)

For i = 0 To mathcs.Count - 1

s = RepDate date = cell.getDateCellValue();lace(mathcs(i), """", "")

s = Replace(s, ":", ",")

xm = Split(s, ",")

For j = 1 To 3

Cells(m, j + 1) = xm(j 2 - 1)

Next

For j = 4 To 5

Cells(m, j + 1) = xm(j 2 + 1)

Next

Cells(m, 1) = wjm

m = m + 1

Next

Exit Do

End If

Loop

Close #1

wjm = Dir

Loop

End Sub

excel 文件不能读取怎么解决

1.将此文件一份并重命名为.zip的文件。

然后打开此文件,再打开xl的文件夹。

会看到有一个文件名为sharedStrings.xml的文件。

将此文件sharedStrings.xml,拖到桌面上。

2.双击打开此文件,拉动滚动条到下方,有下图提示,说明表中的有异常,一般是少了(本人的个人经验)偶尔是缺少

3.使用EmEditor打开sharedStrings.xml。

4.会看到如下图,红色标注说明是成对出现的,少一个就会出错,他们是一个整体。

(2)一般出现这种问Do While Not EOF(1)题off都是不存在或者安装地址出现了错误。进行重新安装。5.搜索,有多少个,有161个。

6.搜索,有多少个,有162个。

7.,少一个,在下图位置(这是从下由上找出来的),不要忘记是成对出现的,选中一个,这一个整体显示灰色。

8.将缺失的添加进去。

9.将更改过的sharedStrings.xml,替换原来的sharedStrings.xml。

11.打开如下图,完成了。

python中读取excel文件

case HSSFCell.CELL_TYPE_BOOLEAN:

常用的简单的用法:

from xlrd import open_workbook

book=open_workbook(r'C:UsersadminDesktopq.xlsx')

sheet=book.sheets_names()[0]#个工作表名称

sheet=data.sheet_by_name('Sheet1')#获得个工作表

sheet=book.sheets()[0]#获得个工作表

#获取总行数

nrows = table.nrows

#获取总列数

ncolWith regs = table.ncols

#工作表的数目

book.nsheets

sheet.cell(0,1)

sheet.row(0)

#读取第二列的内容,从第二行开始,并对其求和

sum(x.value for x in sheet.col(1,start_rowx=1))

sum(sheet.col_values(1,start_rowx=1))#同上