Write values to a particular cell in a sheet in pandas in python

前端 未结 3 1712
执念已碎
执念已碎 2020-12-23 18:24

I have an excel sheet, which already has some values in some cells.

For ex :-

        A      B      C      D
1      val1   val2          val3
2              


        
相关标签:
3条回答
  • Using pandas to read the excel and append the file

    def getpayment_excel(request):
        df = pd.read_excel(open(str(settings.MEDIA_ROOT)+"/"+"details.xlsx", 'rb'), sheetname='Sheet1')
        XLSX_MIME = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        response = HttpResponse(content_type=XLSX_MIME)
        response['Content-Disposition'] = 'attachment; filename="PythonExport.xlsx"'
        writer = pd.ExcelWriter(response, engine='xlsxwriter')
        df.loc[0,'Bank Name'] = "ICICIW"
        df.to_excel(writer, 'Sheet1', index=False)
        writer.save()
        return response
    
    0 讨论(0)
  • 2020-12-23 18:49

    UPDATE2: appending data to existing Excel sheet, preserving other (old) sheets:

    import pandas as pd
    from openpyxl import load_workbook
    
    fn = r'C:\Temp\.data\doc.xlsx'
    
    df = pd.read_excel(fn, header=None)
    df2 = pd.DataFrame({'Data': [13, 24, 35, 46]})
    
    writer = pd.ExcelWriter(fn, engine='openpyxl')
    book = load_workbook(fn)
    writer.book = book
    writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    
    df.to_excel(writer, sheet_name='Sheet1', header=None, index=False)
    df2.to_excel(writer, sheet_name='Sheet1', header=None, index=False,
                 startcol=7,startrow=6)
    
    writer.save()
    

    UPDATE: your Excel file doesn't have a header, so you should process it accordingly:

    In [57]: df = pd.read_excel(fn, header=None)
    
    In [58]: df
    Out[58]:
         0    1
    0  abc  def
    1  ghi  lmn
    
    In [59]: df2
    Out[59]:
       Data
    0    13
    1    24
    2    35
    3    46
    
    In [60]: writer = pd.ExcelWriter(fn)
    
    In [61]: df.to_excel(writer, header=None, index=False)
    
    In [62]: df2.to_excel(writer, startcol=7,startrow=6, header=None, index=False)
    
    In [63]: writer.save()
    

    OLD answer:

    You can use the following trick:

    first read the existing contents of the excel file into a new DF:

    In [17]: fn = r'C:\Temp\b.xlsx'
    
    In [18]: df = pd.read_excel(fn)
    
    In [19]: df
    Out[19]:
           A      B     C      D
    0   val1    NaN  val3   val4
    1  val11  val22   NaN  val33
    

    now we can write it back and append a new DF2:

    In [20]: writer = pd.ExcelWriter(fn)
    
    In [21]: df.to_excel(writer, index=False)
    
    In [22]: df2.to_excel(writer, startcol=7,startrow=6, header=None)
    
    In [23]: writer.save()
    

    0 讨论(0)
  • 2020-12-23 18:53

    I was not able to do what was asked by me in the question by using pandas, but was able to solve it by using Openpyxl.

    I will write few code snippets which would help in achieving what was asked.

    import openpyxl
    
    srcfile = openpyxl.load_workbook('docname.xlsx',read_only=False, keep_vba= True)#to open the excel sheet and if it has macros
    
    sheetname = srcfile.get_sheet_by_name('sheetname')#get sheetname from the file
    sheetname['B2']= str('write something') #write something in B2 cell of the supplied sheet
    sheetname.cell(row=1,column=1).value = "something" #write to row 1,col 1 explicitly, this type of writing is useful to write something in loops
    
    srcfile.save('newfile.xlsm')#save it as a new file, the original file is untouched and here I am saving it as xlsm(m here denotes macros).
    

    So Openpyxl writes to a purticular cell, without touching the other sheets,cells etc. It basically writes to a new file respecting the properties of the original file

    0 讨论(0)
提交回复
热议问题