Hi Fulei,
Thanks for posting, welcome to the community!!
Great that you got started on integrating your Excel sheet in a VIKTOR application.
Just this afternoon I updated the Spreadsheet Calculation Tutorial in our documentation. This implementation also includes the functionality you speak of.
To summarize it in a single snippet:
from pathlib import Path
from viktor import ViktorController
from viktor.external.spreadsheet import SpreadsheetCalculation, SpreadsheetCalculationInput
from viktor.parametrization import ViktorParametrization, NumberField, DownloadButton
from viktor.result import DownloadResult
class Parametrization(ViktorParametrization):
a = NumberField("Parameter A")
b = NumberField("Parameter B")
c = NumberField("Parameter C")
download_button = DownloadButton("Download evaluated spreadsheet", method="download_spreadsheet")
class Controller(ViktorController):
label = 'My Entity Type'
parametrization = Parametrization
def get_evaluated_spreadsheet(self, params):
inputs = [
SpreadsheetCalculationInput('A', params.a),
SpreadsheetCalculationInput('B', params.b),
SpreadsheetCalculationInput('C', params.c),
]
sheet_path = Path(__file__).parent / 'my_spreadsheet.xlsx'
sheet = SpreadsheetCalculation.from_path(sheet_path, inputs=inputs)
result = sheet.evaluate(include_filled_file=True)
return result
def download_spreadsheet(self, params, **kwargs):
result = self.get_evaluated_spreadsheet(params)
return DownloadResult(result.file_content, 'evaluated_spreadsheet.xlsx')
Let me know if that helps!