2016-06-28 33 views
6

Obecnie mam ten kod. Działa idealnie.Dołącz istniejący arkusz programu Excel z nową ramką danych przy użyciu Pythona Python

To pętle poprzez plików excel w folderze usuwa pierwsze 2 wiersze, następnie zapisuje je jako pojedyncze pliki Excela, a także zapisuje pliki w pętli jako załączonym pliku.

Aktualnie dołączany plik zastępuje istniejący plik za każdym razem, gdy uruchamiam kod.

muszę dołączyć nowe dane do dołu już istniejącego excel arkusz ("master_data.xlsx)

dfList = [] 
path = 'C:\\Test\\TestRawFile' 
newpath = 'C:\\Path\\To\\New\\Folder' 

for fn in os.listdir(path): 
    # Absolute file path 
    file = os.path.join(path, fn) 
    if os.path.isfile(file): 
    # Import the excel file and call it xlsx_file 
    xlsx_file = pd.ExcelFile(file) 
    # View the excel files sheet names 
    xlsx_file.sheet_names 
    # Load the xlsx files Data sheet as a dataframe 
    df = xlsx_file.parse('Sheet1',header= None) 
    df_NoHeader = df[2:] 
    data = df_NoHeader 
    # Save individual dataframe 
    data.to_excel(os.path.join(newpath, fn)) 

    dfList.append(data) 

appended_data = pd.concat(dfList) 
appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx')) 

Myślałem, że będzie to proste zadanie, ale nie sądzę. Myślę, że muszę wprowadzić plik master_data.xlsx jako ramkę danych, a następnie dopasować indeks do nowych dołączonych danych i zapisać go z powrotem. A może jest łatwiejszy sposób. Każda pomoc jest doceniana.

+0

jest [to] (http://stackoverflow.com/a/36450435/5741205), co jesteś po? – MaxU

+0

Nie, nie, nie próbuję zapisywać nowych arkuszy, tylko próbuję dołączyć istniejący arkusz. – brandog

Odpowiedz

8

Można użyć openpyxl silnik w połączeniu z startrow parametru:

In [48]: writer = pd.ExcelWriter('c:/temp/test.xlsx', engine='openpyxl') 

In [49]: df.to_excel(writer, index=False) 

In [50]: df.to_excel(writer, startrow=len(df)+2, index=False) 

In [51]: writer.save() 

c: /temp/test.xlsx:

enter image description here

PS możesz również określić header=None jeśli ciebie nie chcesz duplikować nazw kolumn ...

UPDAT E: możesz również chcieć sprawdzić this solution

+0

Hej dziękuję, mam to wykorzystać. (W rzeczywistości nie usuwam tylko 2 wierszy danych, to był tylko obiekt zastępczy dla dużej ilości formatowania.) Potrzebuję go do uzupełnienia na dole istniejącego arkusza, bez linii indeksu. – brandog

+0

@brandog, musisz użyć 'header = None', a będziesz musiał policzyć bieżącą liczbę linii w pliku Excela i użyć go w następujący sposób:' startrow = curr_count + 1' – MaxU

+0

OH, whoops! Tęsknie czytam. Tak, to doskonale odpowiada na moje pytanie! Dzięki – brandog