Преобразуйте XLSX в CVS на Python: Сохраняйте значения, а не формулы

#python #excel #pandas #xlsxwriter

Вопрос:

TLDR: Как я могу преобразовать файл .xlsx в файл .csv и сохранить значения формул вместо самих формул?

Мой код объединяет два листа .xlsx вместе для создания электронных писем для новых пользователей организации. Первый .xlsx содержит формулу, которая объединяет имя пользователя и наш домен, в то время как другой .xlsx содержит запрошенный список новых пользователей. При объединении вновь сгенерированный файл .xlsx под названием ‘users.xlsx» включает в себя желаемую информацию, но сгенерированные электронные письма создаются с использованием формулы, а не значений. Если вас попросят прочитать data_only только через pandas, это, похоже, вообще не работает, и на этом недавно созданном xlsx-листе «пользователи» не генерируются электронные письма.

Все это прекрасно и хорошо работает, но последним шагом является преобразование .xlsx в .csv, поскольку электронные письма технически генерируются с помощью объединяющей формулы, преобразование не сохраняет электронные письма пользователя.

Как я могу преобразовать файл .xlsx в файл .csv и сохранить значения формул вместо самих формул? Возможно ли это? Могу ли я заставить третий файл .xlsx сохранять только значения, а затем выполнить преобразование?

Вещи, которые я пробовал (хотя все они успешно преобразуются в .cvs, данные в формулах теряются):

Протяженный:

 combined_xlsx_2
# The .xlsx product after combining two xlsx (user info   emails)
# This product is 'users.xlsx' - I need it converted to a .csv  
 

Код 1:

 # Read and store content
# of an excel file 
read_file = pd.read_excel (combined_xlsx_2)

# Write the dataframe object
# into csv file
filedir = combined_xlsx_2.replace("users_2.xlsx","users.csv")
read_file.to_csv (filedir, 
                index = None,
                header=True,
                encoding='utf-8')

# read csv file and convert 
# into a dataframe object
df = pd.DataFrame(pd.read_csv(filedir))

df
 

Код 2:

 filename = (combined_xlsx_2)
filedir = (filename.replace("/users.xlsx",""))

path_to_excel_files = glob.glob(filedir)
for excel in path_to_excel_files:
    out = excel.split('.')[0] '.csv'
    df = pd.read_excel(excel)
    df.to_csv(out) 
 

Код 3:

 wb = xlrd.open_workbook(combined_xlsx_2)
sh = wb.sheet_by_name('Sheet1')
your_csv_file = open(combined_xlsx_2.replace('.xlsx', '.csv'), 'w')
wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)

for rownum in range(sh.nrows):
    wr.writerow(sh.row_values(rownum))

your_csv_file.close()
 

Thank you for your time and assistance!

UPDATE 1:

I was able to accomplish this using ‘convert-api’
https://www.convertapi.com/xlsx-to-csv#snippet=python

While not what I had in mind, it will at least get me by. Still hoping there’s a better solution for this. Just wanted to share this just in case anyone else had a similar question.