R 脚本读取汇总 Excel 表格数据
2019-01-25 12:04
801 查看
R 脚本读取汇总 Excel 表格数据
主要用到了
xlsx和rJava包,打开 Excel 文件,读取各表格数据,再写入到汇总表。
下图为处理前的原始数据表格:
下图为处理后的数据:
代码实现
安装&加载包的函数实现。
installed.packages()函数获取所有已安装的包,用以排除已安装的包。
install.packages()函数安装指定的包。
library()加载引入包。
loadLibrary <- function(pkgs) { uninstalledPkgs <- pkgs[!(pkgs %in% installed.packages()[, "Package"])] if (length(uninstalledPkgs)) { install.packages(uninstalledPkgs) } for (pkg in pkgs) { library(pkg, character.only = TRUE, quietly = TRUE) } }
自定义设置。涉及表格文件路径、汇总表名等。
setwd("/path/to/work/dir") # 工作目录 fileName = "summary_sheet_demo.xlsx" # 处理的表格文件 summaryName = "汇总" # 汇总的 sheet 表名 summarySheet = FALSE # 对象变量、忽略 startRow = 2 # 汇总表中操作起始行
设置 CRAN 源。官方默认源可能比较慢,所以选择国内的源很重要。此处选择了清华 CRAN 源,其他的可参考 CRAN Mirrors。
options(repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")
加载依赖包。用到了上述写的安装加载包的函数。
loadLibrary(c("xlsx", "rJava"))
打开工作表。
loadWorkbook()打开指定路径的表格文件,并加载到工作簿对象中。
wb <- loadWorkbook(fileName)
遍历查询&汇总数据。
# 获取所有表格 sheets <- getSheets(wb) # 循环所有表格,找出需要写入的表 for (sheet in sheets) { sheetName <- sheet$getSheetName() if (sheetName == summaryName) { summarySheet <- sheet } } if (summarySheet == FALSE) { stop(paste("表:", summaryName, "未找到")) } # 指定Date格式(此处可忽略) # options(xlsx.date.format='yyyy/MM/dd') # 遍历所有表格 for (sheet in sheets) { # 过滤掉需写入的表 sheetName <- sheet$getSheetName() if (sheetName == summaryName) { next } # 获取表格【内容行数】 rowNum <- sheet$getLastRowNum() print(paste("表名:", sheetName, "总共:", rowNum, "行,", sep = " ")) # 读取表格内容 参数 colClasses 指定每列的类型(实际是指定处理该列的类/对象) data <- read.xlsx2(fileName, sheetName = sheetName, header = FALSE, startRow = 2, colClasses = c("character", "Date", "integer", "integer", rep("numeric", 2), "integer")) print(data) # 将表格内容写入汇总的那张表 addDataFrame(data, summarySheet, col.names = FALSE, row.names = FALSE, startRow = startRow) # 累加行数 startRow <- startRow + rowNum }
把对象内容写入文件中保存。
saveWorkbook(wb, fileName)
完整代码
# 包加载/安装包 loadLibrary <- function(pkgs) { uninstalledPkgs <- pkgs[!(pkgs %in% installed.packages()[, "Package"])] if (length(uninstalledPkgs)) { install.packages(uninstalledPkgs) } for (pkg in pkgs) { library(pkg, character.only = TRUE, quietly = TRUE) } } # 自定义配置 setwd("/path/to/work/dir") # 工作目录 fileName = "summary_sheet_demo.xlsx" # 处理的表格文件 summaryName = "汇总" # 汇总的 sheet 表名 summarySheet = FALSE # 对象变量、忽略 startRow = 2 # 汇总表中操作起始行 # 设置CRAN options(repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/") # 加载依赖包 loadLibrary(c("xlsx", "rJava")) # 打开Excel表格 wb <- loadWorkbook(fileName) # 获取所有表格 sheets <- getSheets(wb) # 循环所有表格,找出需要写入的表 for (sheet in sheets) { sheetName <- sheet$getSheetName() if (sheetName == summaryName) { summarySheet <- sheet } } if (summarySheet == FALSE) { stop(paste("表:", summaryName, "未找到")) } # 指定Date格式(此处可忽略) # options(xlsx.date.format='yyyy/MM/dd') # 遍历所有表格 for (sheet in sheets) { # 过滤掉需写入的表 sheetName <- sheet$getSheetName() if (sheetName == summaryName) { next } # 获取表格【内容行数】 rowNum <- sheet$getLastRowNum() print(paste("表名:", sheetName, "总共:", rowNum, "行,", sep = " ")) # 读取表格内容 参数 colClasses 指定每列的类型(实际是指定处理该列的类/对象) data <- read.xlsx2(fileName, sheetName = sheetName, header = FALSE, startRow = 2, colClasses = c("character", "Date", "integer", "integer", rep("numeric", 2), "integer")) print(data) # 将表格内容写入汇总的那张表 addDataFrame(data, summarySheet, col.names = FALSE, row.names = FALSE, startRow = startRow) # 累加行数 startRow <- startRow + rowNum } # 最后需要把对象内容写入文件中 saveWorkbook(wb, fileName)
表格附件
原文地址: https://shockerli.net/post/r-script-to-read-summary-excel/
相关文章推荐
- C# Window编程随记——第三方读取Excel表格数据的插件(NPOI.dll)
- C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel
- Excel的表格的读取数据
- Oracle EBS R12 XML数据表格的Excel脚本报表
- 从Excel读取数据,注册hotmail等信箱的脚本半自动化简单谈
- python读取excel表格数据
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
- Delphi中使用python脚本读取Excel数据
- [转] Windows下使用Python读取Excel表格数据
- 从数据库从读取数据动态生成JS表格脚本
- 读取excel表格数据
- POI读取excel表格,首列出现跨行表格时,读取表格数据不全解决办法
- [置顶] 【R语言 数据合并】批量读取数据文件合并为一个excel表格
- java读取Excel表格数据
- excel 跨表格数据汇总
- java poi读取excel表格数据
- Oracle EBS R12 XML数据表格的Excel脚本报表
- Windows下使用Python读取Excel表格数据
- Oracle EBS R12 XML数据表格的Excel脚本报表 -- PLUS :问题杂烩