Please help me, the programmer who made this software is gone and now I’m in trouble: the program opens an xlsx file, inserts some data inside and saves it with another name, I need this file to be saved in a specific directory, can anyone help me? Thank you!
import datetime
import os
from shutil import copyfile
import xml.etree.ElementTree as ET
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
class MeasurementsData:
def __init__(self):
self.tag = ""
self.date = ""
self.filename = ""
self.application = ""
self.element = ""
self.concentration = ""
self.unit = ""
self.concentration_results = []
def parse_empirical_assay(self, result):
application_methods=result.find('EmpiricalAssayResult').find('ScreeningInfo').findall('ScreeningMethod')
for method in application_methods:
if self.application != "":
self.application += " - "
self.application += method.attrib['name']
concentration_results = result.find('EmpiricalAssayResult').find('ConcentrationResults').findall('ConcentrationResult')
for concentration_result in concentration_results:
self.concentration_results.append({
'element': concentration_result.attrib['name'],
'concentration': concentration_result.attrib['concentration'],
'unit': concentration_result.attrib['unit']
})
def parse_fundamental_parameters(self, result):
application_methods=result.find('FundamentalParametersResult').find('ScreeningInfo').findall('ScreeningMethod')
for method in application_methods:
if self.application != "":
self.application += " - "
self.application += method.attrib['name']
concentration_results = result.find('FundamentalParametersResult').find('ConcentrationResults').findall('ConcentrationResult')
for concentration_result in concentration_results:
self.concentration_results.append({
'element': concentration_result.attrib['name'],
'concentration': concentration_result.attrib['concentration'],
'unit': concentration_result.attrib['unit']
})
def parse(self, data):
#print(data)
xml_data = ET.fromstring(data)
self.tag = xml_data.attrib['name']
if self.tag == None or self.tag == "":
self.tag = "noname"
self.filename = self.tag + ".xlsx"
self.date = xml_data.attrib['measurementTime']
self.date = self.date.split('.')[0]
self.date=datetime.datetime.strptime(self.date, '%Y-%m-%dT%H:%M:%S')
#print(self.tag)
result = xml_data.find('Result')
if result[0].tag == "EmpiricalAssayResult":
if not os.path.isfile(self.filename):
copyfile("files/ReportDiMisura1.xlsx", self.filename)
self.parse_empirical_assay(result)
elif result[0].tag == "FundamentalParametersResult":
if not os.path.isfile(self.filename):
copyfile("files/ReportDiMisura9Colonne2.xlsx", self.filename)
self.parse_fundamental_parameters(result)
wb = load_workbook(filename = self.filename)
if wb == None:
print('File xlsm non trovato!')
return
ws = wb['Report']
if wb == None:
print('Foglio Report non presente!')
return
font = Font(name='Calibri',
size=11,
bold=False,
italic=False,
vertAlign=None,
underline='none',
strike=False,
color='FF000000')
alignment = Alignment(horizontal='center',
vertical='center',
text_rotation=0,
wrap_text=False,
shrink_to_fit=False,
indent=0)
cell = ws.cell(row=10, column=2)
cell.value = self.application
cell.font = font
cell.alignment = alignment
headers_row=23
row = headers_row+1
count=1
cell = ws.cell(row=row, column=1)
while cell.value != None:
row += 1
count += 1
cell = ws.cell(row=row, column=1)
if cell.value == None:
cell.value = self.date #.strftime("%d/%m/%Y %H:%M")
cell.font = font
cell.alignment = alignment
cell = ws.cell(row=row, column=2)
cell.value = count
cell.font = font
cell.alignment = alignment
column=3
for concentration_result in self.concentration_results:
cell = ws.cell(row=headers_row, column=column)
cell.value = concentration_result['element'] + " " + concentration_result['unit']
cell.font = font
cell.alignment = alignment
cell = ws.cell(row=row, column=column)
cell.value = float(concentration_result['concentration'])
cell.font = font
cell.alignment = alignment
column+=1
wb.save (filename = self.filename)
Advertisement
Answer
In wb.save (filename = self.filename) you can provide any path you need in place of self.filename.
The filename that it gets is defined in the parse method, specifically on following lines:
self.tag = xml_data.attrib['name']
if self.tag == None or self.tag == "":
self.tag = "noname"
self.filename = self.tag + ".xlsx"
From there, you can prepend the contents of self.filename with the desired path. Like this for example:
self.filename = "/desired/path/" + self.tag + ".xlsx" # On Linux
or
self.filename = "C:/desired/path/" + self.tag + ".xlsx" # On Windows