简体   繁体   中英

Python xlWings generate json-File from Range object

I want to generate a json File from a Python xlWings Range object:

import pandas as pd
import numpy as np
import os
import xlwings as xw
 wb=xw.Book(file)
 ws=wb.sheets[0]
 dr=ws.used_range.options(pd.DataFrame)
 df=pd.DataFrame(data=dr)

 jfile=df.to_json(orient='columns')

at this point the program is in an endless loop: df=pd.DataFrame(data=dr)

If you use .value on the end of the dr= line, then you will set dr as a DataFrame, and there will be no need to use the line df=pd.DataFrame(data=dr)

ws.used_range.options(pd.DataFrame) returns a range object, so trying to turn this into a DataFrame is unlikely to be what you are trying to do. This was the output from my test data, where the used range was A1:D11:

#Out[]: 
#                                    0
#0    (((<Range [Book1]Sheet1!$A$1>)))
#1    (((<Range [Book1]Sheet1!$B$1>)))
#2    (((<Range [Book1]Sheet1!$C$1>)))
#3    (((<Range [Book1]Sheet1!$D$1>)))
#4    (((<Range [Book1]Sheet1!$A$2>)))
#...
#39  (((<Range [Book1]Sheet1!$D$10>)))
#40  (((<Range [Book1]Sheet1!$A$11>)))
#41  (((<Range [Book1]Sheet1!$B$11>)))
#42  (((<Range [Book1]Sheet1!$C$11>)))
#43  (((<Range [Book1]Sheet1!$D$11>)))

If you instead use ws.used_range.options(pd.DataFrame).value , then the type of data returns is pd.DataFrame and then then can be converted to json:

df = ws.used_range.options(pd.DataFrame).value
jfile=df.to_json(orient='columns')

See the documentation for converters and options here with an example, which uses .value , here .

Returned types:

type(ws.used_range.options(pd.DataFrame))
#Out[]: xlwings.main.Range
type(ws.used_range.options(pd.DataFrame).value)
#Out[]: pandas.core.frame.DataFrame

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM