【Python数据分析系列】读取Excel文件中的多个sheet表(案例+源码)
在Python中使用pandas库,读取Excel文件中的码解多个sheet表变得极其便捷。假设有一个名为“光谱响应函数.xlsx”的码解Excel文件,其中包含多个sheet表。码解
Excel文件,码解如同数据库,码解北大青鸟超市源码存储着一张或多张数据表。码解本文将展示如何依次读取Excel文件中的码解每一个sheet表。
首先,码解定义excel文件路径,码解通过pd.ExcelFile()创建一个Excel文件对象xls。码解利用该对象的码解sheet_names方法获取所有sheet表名称。然后,码解借助pd.read_excel函数,码解逐一读取每一个sheet表,码解并进行后续的统一处理。
以sheet_name为“ch”的读取结果为例,展示读取后的数据内容。
作者拥有丰富的游戏源码打开软件科研经历,期间在学术期刊发表六篇SCI论文,专注于数据算法研究。目前在某研究院从事数据算法相关工作,致力于分享Python、数据分析、特征工程、机器学习、深度学习、人工智能等基础知识与实际案例。免杀大马源码撰写内容时坚持原创,以简洁的方式解释复杂概念,欢迎关注公众号“数据杂坛”,获取更多数据和源码学习资源。
欲了解更多详情,请参考原文链接。
å¦ä½ç¨Apache POI读åExcel
ããé¦å POIæ¯å¼æºç»ç»Apacheåºåçä¸ä¸ªå¼æºjarå ï¼æä¾äºæ¹ä¾¿è§£æExcelçAPIï¼æ们å¯ä»¥é常æ¹ä¾¿ç使ç¨å®æ¥è¯»åExcelãè¿éä»ç»3.5Finalçæ¬ãããæéç¨å°çjarå å¦ä¸:
ãã说å°Excelï¼æåï¼æ ¼å¼æ¯ä¸ä¸æ ·çï¼ç¨POI解æçæ¹æ³ä¹å°±ä¸ä¸æ ·ï¼Excel主è¦æ¯ä½¿ç¨org.apache.poi.hssf.usermodelå ä¸çç±»æ¥è§£æï¼èExcelå°±æ¯ä½¿ç¨org.apache.poi.xssf.usermodelæ¥è§£æã
ãã解æExcelæºç
说å°Excelï¼æåï¼æ ¼å¼æ¯ä¸ä¸æ ·çï¼ç¨POI解æçæ¹æ³ä¹å°±ä¸ä¸æ ·ï¼Excel主è¦æ¯ä½¿ç¨org.apache.poi.hssf.usermodelå ä¸çç±»æ¥è§£æï¼èExcelå°±æ¯ä½¿ç¨org.apache.poi.xssf.usermodelæ¥è§£æã
解æExcelæºç
StringBuffer content = new StringBuffer();
HSSFWorkbook workbook = new HSSFWorkbook(is); // å建对Excelå·¥ä½ç°¿æ件çå¼ç¨
for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
if (null != workbook.getSheetAt(numSheets)) {
HSSFSheet aSheet = workbook.getSheetAt(numSheets); // è·å¾ä¸ä¸ªsheet
for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {
if (null != aSheet.getRow(rowNumOfSheet)) {
HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // è·å¾ä¸è¡
for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {
if (null != aRow.getCell(cellNumOfRow)) {
HSSFCell aCell = aRow.getCell(cellNumOfRow); // è·å¾åå¼
if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
content.append(aCell.getNumericCellValue() + "\t");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
content.append(aCell.getBooleanCellValue() + "\t");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
content.append(aCell.getStringCellValue() + "\t");
} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
content.append(aCell.getCellFormula() + "\t");
} else {
continue;
}
}
if(cellNumOfRow == aRow.getLastCellNum()) {
content.append("\n");
}
}
}
}
}
}
return content.toString().trim();
解æExcelååºæ¬ä¸æ ·ï¼åªæ¯å°HSSFSheet,HSSFCellçé½æ¹æXSSFSheet,XSSFCellå³å¯ã
å¦å¤è¦æé大家çæ¯Excelçæ ·å¼é½æ¯åºäºä¸ä¸ªåå æ ¼çï¼æ以ç¨HSSFRow.getRowStyle()æ¿æ ·å¼ä¼åºé®é¢çï¼ä¸ä¸å®ä¼æ¿å°ä½ æ³è¦çæ ·å¼ãå¤çå并åå æ ¼æ¯POIçä¸ä¸ªé¾ç¹ï¼åªè½éè¿å¤æå½ååå æ ¼æ¯å¦å¨å并åå æ ¼ä¹ä¸ï¼å¦ææ¯ï¼é£æ¤åå æ ¼çå¼ä¾¿æ¯è¿ä¸ªå并åå æ ¼çé¦ä½ç½®åå æ ¼çå¼ï¼åªæéè¿è¿æ ·æè½æ¥å¤çå并åå æ ¼ã
å¤çå并åå æ ¼ç代ç ï¼
public static boolean isMergedRegion(HSSFSheet sheet, HSSFCell cell) {
//å¾å°ä¸ä¸ªsheetä¸æå¤å°ä¸ªå并åå æ ¼
int sheetmergerCount = sheet.getNumMergedRegions();
for(int i = 0; i < sheetmergerCount; i++) {
//å¾åºå ·ä½çå并åå æ ¼
CellRangeAddress ca = sheet.getMergedRegion(i);
//å¾å°å并åå æ ¼çèµ·å§è¡, ç»æè¡, èµ·å§å, ç»æå
int firstC = ca.getFirstColumn();
int lastC = ca.getLastColumn();
int firstR = ca.getFirstRow();
int lastR = ca.getLastRow();
//å¤æ该åå æ ¼æ¯å¦å¨å并åå æ ¼èå´ä¹å , å¦ææ¯, åè¿å true
if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {
if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {
return true;
}
}
}
return false;
}
public static String getMergedRegionValue(HSSFSheet sheet, HSSFCell cell) {
//è·å¾ä¸ä¸ª sheet ä¸å并åå æ ¼çæ°é
int sheetmergerCount = sheet.getNumMergedRegions();
//便å©å并åå æ ¼
for(int i = 0; i < sheetmergerCount; i++) {
//è·å¾å并åå æ ¼
CellRangeAddress ca = sheet.getMergedRegion(i);
//è·å¾å并åå æ ¼çèµ·å§è¡, ç»æè¡, èµ·å§å, ç»æå
int firstC = ca.getFirstColumn();
int lastC = ca.getLastColumn();
int firstR = ca.getFirstRow();
int lastR = ca.getLastRow();
//å¤æ该åå æ ¼æ¯å¦æ¯å¨å并åå æ ¼ä¸, å¦ææ¯, åè¿åæå¨å并åå æ ¼çé¦åå æ ¼çå¼
if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {
if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {
HSSFRow fRow = sheet.getRow(firstR);
HSSFCell fCell = fRow.getCell(firstC);
//é¤äºå并åå æ ¼é¦åå æ ¼çå¼, å ¶ä½çç¨(*)æ¥åºå
if (fCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC && hasBorder(cell)) {
return String.valueOf(fCell.getNumericCellValue());
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN && hasBorder(cell)) {
return String.valueOf(fCell.getBooleanCellValue());
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_STRING && hasBorder(cell)) {
return fCell.getStringCellValue();
} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA && hasBorder(cell)){
return String.valueOf(fCell.getCellFormula());
}
}
}
}
return "";
}
[按键精灵] [老狼源码分享]----一段Excel思路
实现效果:需实现两个效果,具体为读取Excel文件内容并写入新数据。
首先,easyui php源码下载使用按键精灵的插件 lxj_Office.lxj_ExcelOpen 打开指定路径的Excel文件。
定义变量行号1 和 行号2,初始值为1。
设置循环变量i,初始值也为1。
内部嵌套循环,从行号1开始遍历Excel文件的每一行数据。
输出当前序号i及对应行号行号1的内容。
若读取到的图片数字识别源码数据a为空,则退出循环。
若数据a不为空且包含数字i,则读取第2、3、4、5列的内容,并写入新文件,同时输出列b的内容。
若数据a为空或编号错误,则输出错误信息并记录i值。
循环后更新行号1和行号2的值,同时检查是否每次循环后需要重置i值。
外部循环结束,最后关闭打开的Excel文件。
程序结束时,可调用OnScriptExit子程序执行清理操作。
获取源码命令素材,建议关注按键精灵论坛、知乎账号或微信公众号“按键精灵”。如有疑问,可在底部留言或私信寻求帮助。
详细内容可点击:[老狼][源码分享]----一段Excel思路----匆匆十年() _ 集结令●英雄归来教程比武大赛 - 按键精灵论坛
excel源程序怎么写excel源代码怎么运行
一、工具: microsoft office Excel二、操作步骤1. 双击打开桌面的EXCEL。
2. 单击右上角的OFFICE图标,找到EXCEL选项,单击打开。
3. 勾选在功能区显示“开发工具”选项卡,单击确定按钮完成修改。
4. 单击菜单栏的开发工具,然后找到Visual Basic单击打开便可以进行相关的VBA编程。
觉得有用点个赞吧
进入 代码编辑模式 alt+f \r
然后得有一点VB脚本语言的基础
EXCEL中按钮源码
Worksheets("sheet1").Range("a5").Value = Worksheets("sheet1").Range("iv5").Value Then
Worksheets("sheet2").Range("a5:fy5").Value = _
Worksheets("sheet1").Range("a5:fy5").Value
我发现你的数据是从5-的,所以这里面的常量“5-”可以用变量来代替,简化代码如下:
dim i
for i= 5 to
If Worksheets("sheet1").Range("i1").Value = Worksheets("sheet1").Range("k7").Value And Worksheets("sheet1").Range("a" & i).Value = Worksheets("sheet1").Range("iv" & i).Value Then
Worksheets("sheet2").Range("a" & i & ":fy" & i).Value = _
Worksheets("sheet1").Range("a" & i & ":fy" & i).value
end if
next i
如果解决了你的问题,加点分吧。
2024-11-23 08:10
2024-11-23 07:43
2024-11-23 07:00
2024-11-23 06:51
2024-11-23 06:19