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/
更多文章请访问我的个人博客: https://shockerli.net
R 脚本读取汇总 Excel 表格数据的更多相关文章
- JXL读取写入excel表格数据
问题描述: 使用java的jxl包创建.写入excel表格数据 问题解决: (1)说明 (2)写入execel数据 注: 以上是写入数据需要调用的函数接口 注: 具体接口调用过程,如上所示 (3)读取 ...
- jxl读取Excel表格数据
调用jxl包实现Excel表格数据的读取,代码如下: import java.io.File; import java.io.IOException; import java.util.ArrayLi ...
- C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表
调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...
- 利用 pandas库读取excel表格数据
利用 pandas库读取excel表格数据 初入IT行业,愿与大家一起学习,共同进步,有问题请指出!! 还在为数据读取而头疼呢,请看下方简洁介绍: 数据来源为国家统计局网站下载: 具体方法 代码: i ...
- go读取excel表格数据
go读取excel表格数据 使用工具 github.com/Luxurioust/excelize 百度到的都是使用这个 实际上已经改名了 github.com/360EntSecGroup-Skyl ...
- 用多线程优化Excel表格数据导入校验的接口
公司的需求,当前某个Excel导入功能,流程是:读取Excel数据,传入后台校验每一条数据,判断是否符合导入要求,返回给前端,导入预览展示.(前端等待响应,难点).用户再点击导入按钮,进行异步导入(前 ...
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- Vue3实现动态导入Excel表格数据
1. 前言 在开发工作过程中,我们会遇到各种各样的表格数据导入,大部分我们的解决方案:提供一个模板前端进行下载,然后按照这个模板要求进行数据填充,最后上传导入,这是其中一种解决方案.个人认为还有另外 ...
- Visual Studio 2010利用libxl读写excel表格数据
C++读写数据,一般通过txt文件,但是随着数据量的增大,采集数据时运用excel表格的优势得以逐步体现.本文主要介绍一下运用第三方库libxl,对excel表格数据进行读写.分为三个部分,第一部分是 ...
随机推荐
- Maven学习3(中央仓库)
Maven项目在运行的时候,会首先找本地仓库是否有需要的jar,如果没有则去调用远程仓库. 解读Maven在仓库中的存储路径: 1.基于groupId准备路径,将句点分隔符转成路径分隔符,就是将 & ...
- 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
不管是app的下载链接还是普通文件的链接在微信内置浏览器或者QQ内置浏览器都会被屏蔽.这是微信对第三方下载域名实施的拦截政策.被拦截了用户在微信内打开就会提示“已停止访问该网页”. 那么当我们遇到这个 ...
- django安装及简单使用
1 web应用2 cs和bs架构3 http协议----重点 -特点:1 2 3 4 -请求头: 请求首行 get / http/1.1\r\n key:value\r\n key:value\r\n ...
- Python request 和response 初使用
request的get方法r=request.get(url)构造一个向服务器请求资源的Request对象, 返回一个包含服务器资源的Response对象. Request对象由Request库自动生 ...
- bower学习总结
1. 安装软件:node-v6.10.3-x64.msi 和 Git-2.13.0-64-bit.exe 在安装git时,需要选择‘Run Git from the Windows Command P ...
- Django积木块五——分页
分页 django本身带有分页功能,为什么要用他呢?因为它的代码更为简洁,并且在做筛选的时候会把url中的所有参数都组装起来,并且加上分页.也就是做筛选中的结果也可以用这个分页. pip instal ...
- nodejs多版本管理
nvm安装步骤: Windows版本安装 https://github.com/coreybutler/nvm-windows/releases 下载最新的setup文件 ,解压缩,安装到C:\Dev ...
- HG
==========秦魏魏曹WLLMONKTVKTPKMMPWUUUQL}][孔吕吕孔戚%韩施卫韩华?韩魏L!张沈韩谢==========
- JS自定义鼠标右击菜单
自定义鼠标右击菜单要素: 禁止页面默认右击事件 设置右击菜单的样式以及菜单出现的位置(通过捕获鼠标点击位置来确定菜单的位置) 鼠标在指定控件(区域)上右击时显示菜单(默认菜单隐藏,点击鼠标右键时显示) ...
- [转] Java 的泛型擦除和运行时泛型信息获取
原文链接 https://my.oschina.net/lifany/blog/875769 前言 现在很多程序员都会在简历中写上精通 Java.但究竟怎样才算是精通 Java 呢?我觉得不仅要熟练掌 ...