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.pswp.cn/news/456169.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456169.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456169.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[Grid Layout] Place grid items on a grid using grid-column and grid-row

It’s possible to position a grid item anywhere on a grid track. To do this, let’s specify some grid-template-columns and grid-template-rows, and to the grid items, we’ll pass grid-column and grid-row some numeric values. <!DOCTYPE html> <html l…

【大數據】最新大數據學習路線(完整詳細版,含整套教程)

大數據學習路線 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…

264編碼基本概念 FFMpeg的解碼流程

下面轉自http://topic.csdn.net/u/20081020/16/7156e0b2-dbfb-4b4f-af59-2be04cf9a420.html 的8樓 1、NAL、Slice與frame意思及相互關系 NAL指網絡提取層&#xff0c;里面放一些與網絡相關的信息Slice是片的意思&#xff0c;264中把圖像分成一幀&#xff08;frame&#xff09;…

谷歌瀏覽器開發調試工具中Sources面板 js調試等 完全介紹

這次分享的是Chrome開發工具中最有用的面板Sources。 Sources面板幾乎是我最常用到的Chrome功能面板&#xff0c;也是在我看來決解一般問題的主要功能面板。通常只要是開發遇到了js報錯或者其他代碼問題&#xff0c;在審視一遍自己的代碼而一無所獲之后&#xff0c;我首先就會打…

java XML解析防止外部實體注入

/** * 增加防止部實體注入邏輯* <功能詳細描述>* param reader* throws SAXException* see [類、類#方法、類#成員]*/public static void setReaderFeature(SAXReader reader)throws SAXException{reader.setFeature("http://apache.org/xml/features/disallow-doct…

【Python】最新Python學習路線(完整詳細版,含整套教程)

python目前應用最廣的三個崗位&#xff1a;全棧開發、數據分析、運維開發&#xff0c;今天我們就以這三個重點的崗位來做一下自學Python的規劃&#xff0c;希望你在學之前就能有明確的學習方向。 最近開始整理python的資料&#xff0c;博主建立了一個qq群&#xff0c;希望給大家…

程序員,軟件測試知多少?

送給初級程序員的測試認知文作為開發同學&#xff0c;一些基本的測試崗位相關知識還是很有必要了解一下&#xff0c;免的某些同學在工作中和測試同學斗嘴、打架、群毆等以及被測試鄙視....。 我們常常聽說的一些測試專業術語&#xff0c;比如白盒、黑盒、單元測試&#xff0c;相…

ffmpeg最新源代碼(定期更新)

為了方便那些不能連接到ffmpeg的SVN倉庫更新源代碼的用戶&#xff0c;ffmpeg工程組特開辟一個專區&#xff0c;定期更新ffmpeg的源代碼&#xff0c;并將其快照上傳&#xff0c;有需要的朋友可以長期關注本帖。ffmpeg的編譯指令通常為&#xff1a;1、配置&#xff1a;configurat…

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;造福大眾。今天要講述的集中定位方式&…

H.264解碼器ffmpeg完整優化代碼(包括PC和Windows Mobile版本)

這里把前段時間對ffmpeg0.48進行簡化和修改&#xff0c;包括修正內存泄漏&#xff0c;修改一些語句使Max Speed能夠打開這些。其實代碼還是比較亂的&#xff0c;也有很大的繼續優化空間。這個工作花費了我一些休息時間&#xff0c;不過&#xff0c;我確實學習到了很多。這個代碼…

1.4.在TypeScript中使用JQuery

我們可以通過類型定義文件(*.d.ts)實現在TS中使用JQ 1.4.1.方式1 通過GitHub項目&#xff0c;手動下載&#xff0c;不過推薦使用第二種方式 項目地址&#xff1a; https://github.com/DefinitelyTyped/DefinitelyTyped 1.4.2.通過typings的方式 項目地址&#xff1a;https://gi…

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

碼字不易&#xff0c;喜歡請點贊&#xff01;&#xff01;&#xff01; 摘要 這篇主要講解如何對pandas的DataFrame進行切片&#xff0c;包括取某行、某列、某幾行、某幾列、以及多重索引的取數方法。 ? 選取行名、列名、值 ? 以標簽&#xff08;行、列的名字&#xff09;…

sql server 保留小數,向上保留指定位數的小數,僅記錄,勿看。

比如 4.05 要取成 4.1 &#xff0c; 4.16 取成 4.2 &#xff0c;4.5 取成 4.5 &#xff0c;意思就是小數部分第二位不管是多少都丟掉然后加0.1&#xff0c;但是如果是 4.5 這樣完整的就不需要處理。 可以像下面這么寫。 select ceiling(4.56*10)/10轉載于:https://www.cnblogs.…

HelloCsdn

博客聲明我的第一個文章我的第一個文章 從現在開始,我要再這里記錄我的學習心得和體會,讓我們相互學習,一起努力,共同進步.

H264學習指南

因為最近手頭的活基本搞完了&#xff0c;人也閑了下來&#xff0c;這么熱的天氣&#xff0c;突然想寫這么一篇文章。不過首先聲明的是我對H264并不是太熟悉。但多多少少也學習了這么久了&#xff0c;寫點心得出來對自己是個交待&#xff0c;同時也希望給新手們一點幫助&#xf…

什么是數據分析的關鍵指標?

什么是核心關鍵指標呢&#xff1f; 這是一個好問題&#xff0c;不過沒有標準的答案。企業性質不同&#xff0c;所處行業、發展階段不同&#xff0c;關注點當然不同。不過大體可以這樣來劃分。 1、發展階段不同&#xff0c;需求不同 對于一個想要做數據化管理的企業來說&#xf…

01Pandas_數據結構

Pandas數據結構 做python數據分析&#xff0c;數據挖掘&#xff0c;機器學習的童鞋應該都離不開pandas。在做數據的預處理的時候pandas尤為給力。 本文主要介紹pandas中的兩種數據結構&#xff1a;series,dataframe。 import pandas as pd 1.Series 首先來介紹series數據結…

加密函數

MD5&#xff1a;密碼為web頁面做準備&#xff0c;建議使用MD5 PASSWORD() :修改當前用戶或其他用戶密碼 mysql> SELECT MD5(admin); #對admin進行MD5的加密&#xff08;32位&#xff09;----------------------------------| MD5(admin) |--------------------------------…