主要用到了 xlsxrJava 包,打开 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)

表格附件

summary_sheet_demo.xlsx


原文地址: https://shockerli.net/post/r-script-to-read-summary-excel/

更多文章请访问我的个人博客: https://shockerli.net

R 脚本读取汇总 Excel 表格数据的更多相关文章

  1. JXL读取写入excel表格数据

    问题描述: 使用java的jxl包创建.写入excel表格数据 问题解决: (1)说明 (2)写入execel数据 注: 以上是写入数据需要调用的函数接口 注: 具体接口调用过程,如上所示 (3)读取 ...

  2. jxl读取Excel表格数据

    调用jxl包实现Excel表格数据的读取,代码如下: import java.io.File; import java.io.IOException; import java.util.ArrayLi ...

  3. C#调用NPOI组件读取excel表格数据转为datatable写入word表格中并向word中插入图片/文字/书签 获得书签列表

    调用word的com组件将400条数据导入word表格中耗时10分钟简直不能忍受,使用NPOI组件耗时4秒钟.但是NPOI中替换书签内容的功能不知道是不支持还是没找到. 辅助类 Excel表格数据与D ...

  4. 利用 pandas库读取excel表格数据

    利用 pandas库读取excel表格数据 初入IT行业,愿与大家一起学习,共同进步,有问题请指出!! 还在为数据读取而头疼呢,请看下方简洁介绍: 数据来源为国家统计局网站下载: 具体方法 代码: i ...

  5. go读取excel表格数据

    go读取excel表格数据 使用工具 github.com/Luxurioust/excelize 百度到的都是使用这个 实际上已经改名了 github.com/360EntSecGroup-Skyl ...

  6. 用多线程优化Excel表格数据导入校验的接口

    公司的需求,当前某个Excel导入功能,流程是:读取Excel数据,传入后台校验每一条数据,判断是否符合导入要求,返回给前端,导入预览展示.(前端等待响应,难点).用户再点击导入按钮,进行异步导入(前 ...

  7. Java操作Jxl实现导出数据生成Excel表格数据文件

    实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...

  8. Vue3实现动态导入Excel表格数据

    1.  前言 在开发工作过程中,我们会遇到各种各样的表格数据导入,大部分我们的解决方案:提供一个模板前端进行下载,然后按照这个模板要求进行数据填充,最后上传导入,这是其中一种解决方案.个人认为还有另外 ...

  9. Visual Studio 2010利用libxl读写excel表格数据

    C++读写数据,一般通过txt文件,但是随着数据量的增大,采集数据时运用excel表格的优势得以逐步体现.本文主要介绍一下运用第三方库libxl,对excel表格数据进行读写.分为三个部分,第一部分是 ...

随机推荐

  1. Unity3D编辑器扩展(四)——扩展自己的组件

    前面已经写了三篇: Unity3D编辑器扩展(一)——定义自己的菜单按钮 Unity3D编辑器扩展(二)——定义自己的窗口 Unity3D编辑器扩展(三)——使用GUI绘制窗口 今天写第四篇,扩展自己 ...

  2. 清除Linux日志文件命令

    find /opt/tomcat/logs/catalina_* -mtime +9 -exec rm -rf {} \;

  3. Python之路【第三篇】编码

    Python代码——>字节码——>机器码——>计算机 Windows: cmd ==> python 文件路径 cmd ==>python >> 输入命令 L ...

  4. scrapy爬虫之模拟ajax post请求获取数据

    实质:分析真实请求地址,根据规则构造新地址从而获得数据. 分析发现数据是通过异步ajax方式→post 获得的 于是通过分析response ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 发现每次翻页 网 ...

  5. redis & memcache 性能比较

    redis和memcache非常像的,都是key,value的方式,将数据存放内存中.最近在学习redis,在网上看了一些这方面的资料,有三种观点: redis读写内存比memcache快 memca ...

  6. Unable to launch the IIS Express Web server

    尝试运行程序,出现此异常提示Unable to launch the IIS Express Web server. 解决问题,是把网址修改为另一个试试: 把http://localhost:1114 ...

  7. MySQL InnoDB 行记录格式(ROW_FORMAT)

    MySQL InnoDB 行记录格式(ROW_FORMAT) 一.行记录格式的分类和介绍 在早期的InnoDB版本中,由于文件格式只有一种,因此不需要为此文件格式命名.随着InnoDB引擎的发展,开发 ...

  8. Javascript高级编程学习笔记(61)—— 事件(5)UI事件

    UI事件 UI事件是指那些不一定与用户操作有关的事件 这些事件在DOM规范出现之前,都是以各种不同的形式存在于不同的浏览器 而在DOM事件中为了保证向后兼容,现有的UI事件如下: DOMActivat ...

  9. PHP中的自动加载

      自动加载? 或许你已经对自动加载有所了解.简单描述一下:自动加载就是我们在new一个class的时候,不需要手动去写require来导入这个class.php文件,程序自动帮我们加载导入进来.这是 ...

  10. MySql事务的隔离级别及作用

    逻辑工作单元遵循一系列(ACID)规则则称为事务. 原子性:保证事务是一系列的运作,如果中间过程有一个不成功则全部回滚,全部成功则成功.保证了事务的原则性. 一致性:一致性指的是比如A向B转100块钱 ...