读取excel_读取excel的数据
如何用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的数据
POI为我们带来了什么?
在很多的企业当中,储蓄数据是使用Excel文档的,因为Excel文档的格式方便,也能套用公式,而企业程序是存储在数据库当中,这样就需要一种两者之间互相转换的方法,当企业刚开始使用信息化的管理系统时,也需要将Excel的数据录入到程序当中,这种需求是非常普遍的.
POI使用:
首先增加Men的依赖
以下为作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数据
FileOutputmatlab读取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 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); 使用以下代码即可实现: 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 1.将此文件一份并重命名为.zip的文件。 然后打开此文件,再打开xl的文件夹。 会看到有一个文件名为sharedStrings.xml的文件。 将此文件sharedStrings.xml,拖到桌面上。 2.双击打开此文件,拉动滚动条到下方,有下图提示,说明表中的 3.使用EmEditor打开sharedStrings.xml。 4.会看到如下图,红色标注说明 (2)一般出现这种问Do While Not EOF(1)题off都是不存在或者安装地址出现了错误。进行重新安装。5.搜索 6.搜索,有多少个,有162个。 7. 8.将缺失的 9.将更改过的sharedStrings.xml,替换原来的sharedStrings.xml。 11.打开如下图,完成了。 常用的简单的用法: 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))#同上如何读取excel中的文本文件
break;excel 文件不能读取怎么解决
python中读取excel文件
case HSSFCell.CELL_TYPE_BOOLEAN:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。