R 脚本读取汇总 Excel 表格数据

主要用到了 xlsx 和 rJava 包,打开 Excel 文件,读取各表格数据,再写入到汇总表。

下图为处理前的原始数据表格:

处理前-w480

下图为处理后的数据:

处理后-w480

代码实现

安装&加载包的函数实现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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】最新大数据学习路线(完整详细版,含整套教程)

大数据学习路线 java(Java se,javaweb) Linux(shell,高并发架构,lucene,solr) Hadoop(Hadoop,HDFS,Mapreduce,yarn,hive,hbase,sqoop,zookeeper,flume) 机器学习(R,mahout) Storm(Storm,kafka,redis) Spark(scala,spark,spark core,spark sql,spark streaming,spark mllib,spa…

谷歌浏览器开发调试工具中Sources面板 js调试等 完全介绍

这次分享的是Chrome开发工具中最有用的面板Sources。 Sources面板几乎是我最常用到的Chrome功能面板&#xff0c;也是在我看来决解一般问题的主要功能面板。通常只要是开发遇到了js报错或者其他代码问题&#xff0c;在审视一遍自己的代码而一无所获之后&#xff0c;我首先就会打…

【Python】最新Python学习路线(完整详细版,含整套教程)

python目前应用最广的三个岗位&#xff1a;全栈开发、数据分析、运维开发&#xff0c;今天我们就以这三个重点的岗位来做一下自学Python的规划&#xff0c;希望你在学之前就能有明确的学习方向。 最近开始整理python的资料&#xff0c;博主建立了一个qq群&#xff0c;希望给大家…

程序员,软件测试知多少?

送给初级程序员的测试认知文作为开发同学&#xff0c;一些基本的测试岗位相关知识还是很有必要了解一下&#xff0c;免的某些同学在工作中和测试同学斗嘴、打架、群殴等以及被测试鄙视....。 我们常常听说的一些测试专业术语&#xff0c;比如白盒、黑盒、单元测试&#xff0c;相…

vue 入门环境搭建

公司项目要用vue.js来开发&#xff0c;要使用vue来开发前端框架&#xff0c;首先要有环境&#xff0c;所以给大家介绍一下如何搭建vue环境。其实很简单&#xff1a; 1.首先下载安装node.js。 去官网https://nodejs.org/zh-cn/下载安装包。 2.安装webpack 打开cmd命令界面&#…

【解决】Win10修改host没有权限问题

Step1&#xff1a;右键文件选择属性&#xff0c;选择安全&#xff0c;点击编辑&#xff1a; Step2&#xff1a;在弹窗中点击添加&#xff0c;在弹窗中点击高级&#xff1a; Step3&#xff1a;在弹窗中点击立即查找&#xff0c;选中当前用户&#xff0c;点击确定&#xff1a; …

[已授权] 互联网定位技术小谈

​ 诚邀阿里云先知社区邀请&#xff0c;不胜感激&#xff01;今日小编在此为大家介绍一下互联网中所应用的定位技术。互联网的发展日新月异&#xff0c;技术迭代很快&#xff0c;各行各业的智慧在互联网这片蓝天下碰撞结晶&#xff0c;造福大众。今天要讲述的集中定位方式&…

Python的DataFrame切片大全(包含多重索引)

码字不易&#xff0c;喜欢请点赞&#xff01;&#xff01;&#xff01; 摘要 这篇主要讲解如何对pandas的DataFrame进行切片&#xff0c;包括取某行、某列、某几行、某几列、以及多重索引的取数方法。 • 选取行名、列名、值 • 以标签&#xff08;行、列的名字&#xff09;…

什么是数据分析的关键指标?

什么是核心关键指标呢&#xff1f; 这是一个好问题&#xff0c;不过没有标准的答案。企业性质不同&#xff0c;所处行业、发展阶段不同&#xff0c;关注点当然不同。不过大体可以这样来划分。 1、发展阶段不同&#xff0c;需求不同 对于一个想要做数据化管理的企业来说&#xf…

加密函数

MD5&#xff1a;密码为web页面做准备&#xff0c;建议使用MD5 PASSWORD() :修改当前用户或其他用户密码 mysql> SELECT MD5(admin); #对admin进行MD5的加密&#xff08;32位&#xff09;----------------------------------| MD5(admin) |--------------------------------…

如何使用notepad运行python程序

关于使用notepad运行python程序 首先要确保python解释器已经安装成功,查看方法,windows可以在命令提示符中查看,通过按下winR键,调出运行窗口,在输入框中输入cmd回车,然后在命令行中输入python,若出现版本信息,例如Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC…

插入排序:表折半插入

在前一篇插入排序&#xff1a;表插入中。我们用静态链表的存储方式。直接插入的策略&#xff0c;构建了一种新的插入排序算法&#xff1a;表插入。有人可能会想到&#xff1a;相同是静态链表的形式&#xff0c;为什么不使用更高效的折半插入策略呢&#xff1f;这样的想法真的非…

【机器学习】sklearn实现---归类为5大类

sklearn实现---归类为5大类 sklearn.preprocessing.scale()&#xff08;最常用&#xff0c;易受异常值影响&#xff09;sklearn.preprocessing.StandardScaler()sklearn.preprocessing.minmax_scale()&#xff08;一般缩放到[0,1]之间&#xff0c;若新数据集最大最小值范围有变…

Kafka官方文档翻译——实现

IMPLEMENTATION 1. API Design Producer APIs Producer API封装了底层两个Producer&#xff1a; kafka.producer.SyncProducerkafka.producer.async.AsyncProducerclass Producer {/* Sends the data, partitioned by key to the topic using either the *//* synchronous or t…

【机器学习】熵、决策树、随机森林 总结

一、熵 公式&#xff1a; −∑i1np(xi)∗log2p(xi)-\sum_{i 1}^{n}{p(xi)*log_2p(xi)}−i1∑n​p(xi)∗log2​p(xi) ∑i1np(xi)∗log21p(xi)\sum_{i1}^{n}p(xi)*log_2\frac{1}{p(xi)}i1∑n​p(xi)∗log2​p(xi)1​ import numpy as np# 账号是否真实&#xff1a;3no&#xff…

HDU 4857 逃生(拓扑排序)

拓扑排序 一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序&#xff0c;是将G中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点u和v&#xff0c;若<u&#xff0c;v> ∈E(G)&#xff0c;则u在线性序列中出现在v之前。 通常&#xff0c;…

关于deepin系统安装design compiler的问题解答

关于deepin系统安装design compiler的问题解答 Design Compiler是Synopsys综合软件的核心产品。它提供约束驱动时序最优化&#xff0c;并支持众多的设计类型&#xff0c;把设计者的HDL描述综合成与工艺相关的门级设计&#xff1b;它能够从速度、面积和功耗等方面来优化组合电…

【机器学习】交叉验证筛选参数K值和weight

交叉验证 导包 import numpy as npfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn import datasets#model_selection &#xff1a;模型选择 # cross_val_score: 交叉 &#xff0c;validation&#xff1a;验证&#xff08;测试&#xff09; #交叉验证 from s…

手机只能签荣耀!最忠诚代言人胡歌喊你去天猫超品日

在你心中&#xff0c;男神胡歌是什么样子&#xff1f;“御剑乘风来&#xff0c;除魔天地间。”也许是《仙剑奇侠传》里飞扬跋扈、青春不羁的侠客李逍遥。“遍识天下英雄路&#xff0c;俯首江左有梅郎。”也许是《琅铘榜》中才智冠天下&#xff0c;远在江湖却名动帝辇的麒麟才子…

欧式距离与曼哈顿距离

欧式距离&#xff0c;其实就是应用勾股定理计算两个点的直线距离 二维空间的公式 其中&#xff0c; 为点与点之间的欧氏距离&#xff1b;为点到原点的欧氏距离。 三维空间的公式 n维空间的公式 曼哈顿距离&#xff0c;就是表示两个点在标准坐标系上的绝对轴距之和&#xff1a…