经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » R语言 » 查看文章
R 脚本读取汇总 Excel 表格数据
来源:cnblogs  作者:韭白  时间:2019/1/28 9:41:39  对本文有异议

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

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

处理前

下图为处理后的数据:

处理后

代码实现

安装&加载包的函数实现installed.packages() 函数获取所有已安装的包,用以排除已安装的包。install.packages() 函数安装指定的包。library() 加载引入包。

  1. loadLibrary <- function(pkgs) {
  2. uninstalledPkgs <- pkgs[!(pkgs %in% installed.packages()[, "Package"])]
  3. if (length(uninstalledPkgs)) {
  4. install.packages(uninstalledPkgs)
  5. }
  6. for (pkg in pkgs) {
  7. library(pkg, character.only = TRUE, quietly = TRUE)
  8. }
  9. }

自定义设置。涉及表格文件路径、汇总表名等。

  1. setwd("/path/to/work/dir") # 工作目录
  2. fileName = "summary_sheet_demo.xlsx" # 处理的表格文件
  3. summaryName = "汇总" # 汇总的 sheet 表名
  4. summarySheet = FALSE # 对象变量、忽略
  5. startRow = 2 # 汇总表中操作起始行

设置 CRAN 源。官方默认源可能比较慢,所以选择国内的源很重要。此处选择了清华 CRAN 源,其他的可参考 CRAN Mirrors

  1. options(repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")

加载依赖包。用到了上述写的安装加载包的函数。

  1. loadLibrary(c("xlsx", "rJava"))

打开工作表loadWorkbook() 打开指定路径的表格文件,并加载到工作簿对象中。

  1. wb <- loadWorkbook(fileName)

遍历查询&汇总数据

  1. # 获取所有表格
  2. sheets <- getSheets(wb)
  3. # 循环所有表格,找出需要写入的表
  4. for (sheet in sheets) {
  5. sheetName <- sheet$getSheetName()
  6. if (sheetName == summaryName) {
  7. summarySheet <- sheet
  8. }
  9. }
  10. if (summarySheet == FALSE) {
  11. stop(paste("表:", summaryName, "未找到"))
  12. }
  13. # 指定Date格式(此处可忽略)
  14. # options(xlsx.date.format='yyyy/MM/dd')
  15. # 遍历所有表格
  16. for (sheet in sheets) {
  17. # 过滤掉需写入的表
  18. sheetName <- sheet$getSheetName()
  19. if (sheetName == summaryName) {
  20. next
  21. }
  22. # 获取表格【内容行数】
  23. rowNum <- sheet$getLastRowNum()
  24. print(paste("表名:", sheetName, "总共:", rowNum, "行,", sep = " "))
  25. # 读取表格内容 参数 colClasses 指定每列的类型(实际是指定处理该列的类/对象)
  26. data <- read.xlsx2(fileName, sheetName = sheetName, header = FALSE, startRow = 2, colClasses = c("character",
  27. "Date", "integer", "integer", rep("numeric", 2), "integer"))
  28. print(data)
  29. # 将表格内容写入汇总的那张表
  30. addDataFrame(data, summarySheet, col.names = FALSE, row.names = FALSE, startRow = startRow)
  31. # 累加行数
  32. startRow <- startRow + rowNum
  33. }

把对象内容写入文件中保存

  1. saveWorkbook(wb, fileName)

完整代码

  1. # 包加载/安装包
  2. loadLibrary <- function(pkgs) {
  3. uninstalledPkgs <- pkgs[!(pkgs %in% installed.packages()[, "Package"])]
  4. if (length(uninstalledPkgs)) {
  5. install.packages(uninstalledPkgs)
  6. }
  7. for (pkg in pkgs) {
  8. library(pkg, character.only = TRUE, quietly = TRUE)
  9. }
  10. }
  11. # 自定义配置
  12. setwd("/path/to/work/dir") # 工作目录
  13. fileName = "summary_sheet_demo.xlsx" # 处理的表格文件
  14. summaryName = "汇总" # 汇总的 sheet 表名
  15. summarySheet = FALSE # 对象变量、忽略
  16. startRow = 2 # 汇总表中操作起始行
  17. # 设置CRAN
  18. options(repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")
  19. # 加载依赖包
  20. loadLibrary(c("xlsx", "rJava"))
  21. # 打开Excel表格
  22. wb <- loadWorkbook(fileName)
  23. # 获取所有表格
  24. sheets <- getSheets(wb)
  25. # 循环所有表格,找出需要写入的表
  26. for (sheet in sheets) {
  27. sheetName <- sheet$getSheetName()
  28. if (sheetName == summaryName) {
  29. summarySheet <- sheet
  30. }
  31. }
  32. if (summarySheet == FALSE) {
  33. stop(paste("表:", summaryName, "未找到"))
  34. }
  35. # 指定Date格式(此处可忽略)
  36. # options(xlsx.date.format='yyyy/MM/dd')
  37. # 遍历所有表格
  38. for (sheet in sheets) {
  39. # 过滤掉需写入的表
  40. sheetName <- sheet$getSheetName()
  41. if (sheetName == summaryName) {
  42. next
  43. }
  44. # 获取表格【内容行数】
  45. rowNum <- sheet$getLastRowNum()
  46. print(paste("表名:", sheetName, "总共:", rowNum, "行,", sep = " "))
  47. # 读取表格内容 参数 colClasses 指定每列的类型(实际是指定处理该列的类/对象)
  48. data <- read.xlsx2(fileName, sheetName = sheetName, header = FALSE, startRow = 2, colClasses = c("character",
  49. "Date", "integer", "integer", rep("numeric", 2), "integer"))
  50. print(data)
  51. # 将表格内容写入汇总的那张表
  52. addDataFrame(data, summarySheet, col.names = FALSE, row.names = FALSE, startRow = startRow)
  53. # 累加行数
  54. startRow <- startRow + rowNum
  55. }
  56. # 最后需要把对象内容写入文件中
  57. saveWorkbook(wb, fileName)

表格附件

summary_sheet_demo.xlsx


原文地址: https://shockerli.net/post/r-script-to-read-summary-excel/
更多文章请访问我的个人博客: https://shockerli.net

原文链接:http://www.cnblogs.com/shockerli/p/r-script-to-read-summary-excel.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号