2013-10-02 76 views
2

我有一組excel文件,我將其導入到R中。從Excel導入時如何忽略隱藏數據

這些文件包含我想忽略的隱藏數據 - 例如,根本不導入它,或者將其導入一個標誌,指示它被隱藏,然後我可以刪除它。

的文件包含兩種類型的隱藏的數據的:

  • 完整片被隱藏
  • 特定行的片材內被隱藏。

有沒有辦法確定什麼時候excel中的數據被隱藏了?

現在,我使用的是gdata包,但很樂意用XLConnect或其他包裝

示例代碼:

library(gdata) 
xlsfile <- "test.xls" 

# grab all the sheet names. 
# This is giving me both hidden & non-hidden sheets. I would like only the latter 
sheets <- sheetNames(xlsfile) 

# read in the xls file, by sheet 
xlData <- 
    lapply(sheets, function(s) 
     read.xls(xlsfile, sheet=s, stringsAsFactors = FALSE)) 

如果需要的話,我可以創建一個虛擬xls文件並張貼它。

+2

我被困在這個地獄圈裏的困擾。我認爲從另一端做起可能更容易,即編寫一個將非隱藏數據導出爲CSV的VBA腳本。但我無法提供更具體的建議,因爲我原則上會拒絕這些文件。 – Roland

+0

您可能已經知道這一點,但您可以在複製數據之前檢查是否可見:如果表(ws).Visible = false,然後複製... –

+0

@PortlandRunner是可見標誌是(或可能)導出的東西嗎? –

回答

2

XLConnect有一個很好的功能,叫做isSheetHidden它可以做你想做的。假設Sheet2隱藏:

library(XLConnect) 
xlsfile <- "Book1.xls" 
wb <- loadWorkbook(xlsfile, create = TRUE) 
isSheetHidden(wb, "Sheet1") # FALSE 
isSheetHidden(wb, "Sheet2") # TRUE 

gdata你會寫自己的函數調用底層的perl軟件包訪問表屬性,但它是可能的。

+0

太好了,謝謝!現在如果只有他們有類似的行...? –

+0

是的,'isHidden'不適用於行。因此,'XLConnect'封裝了HFFS(Horrible Spreadsheet Format),這是一個不錯的Java庫。 'XLConnect'包裝器[發佈到Github](https://github.com/miraisolutions/xlconnect-java)。 [HFFS的API似乎表明他們有一個'getHidden' for rows](http://poi.apache.org/apidocs/org/apache/poi/hssf/record/ColumnInfoRecord.html#getHidden%28%29 )。對包裝器進行輕微的編輯可能並不困難,所以你需要暴露'getHidden'函數。你甚至可以要求作者爲你做:) – nograpes

+1

你可以使用'rcom'做隱藏的行導入:http://rcom.univie.ac.at/ – Hansi