From dd02a35d565802b37759c9d8c8b058965782001d Mon Sep 17 00:00:00 2001 From: Matthias Prinke Date: Thu, 18 Jul 2024 16:33:12 +0200 Subject: [PATCH] Added --- .../misc/ExcelExample/doc/Documentation.md | 237 ++++++++++++++ AppExamples/misc/ExcelExample/doc/README.md | 9 + .../misc/ExcelExample/doc/excel_example.png | Bin 0 -> 52430 bytes AppExamples/misc/ExcelExample/icon.png | Bin 0 -> 3659 bytes .../misc/ExcelExample/license/license.txt | 296 ++++++++++++++++++ AppExamples/misc/ExcelExample/metainfo.json | 17 + .../scripts/example_project_keywords.xlsx | Bin 0 -> 10126 bytes .../ExcelExample/scripts/export_file.gdlg | 44 +++ .../scripts/export_project_keywords.py | 146 +++++++++ .../ExcelExample/scripts/import_file.gdlg | 44 +++ .../scripts/import_project_keywords.py | 86 +++++ .../scripts/modules/requirements.txt | 1 + .../misc/ExcelExample/scripts/no_project.gdlg | 60 ++++ 13 files changed, 940 insertions(+) create mode 100644 AppExamples/misc/ExcelExample/doc/Documentation.md create mode 100644 AppExamples/misc/ExcelExample/doc/README.md create mode 100644 AppExamples/misc/ExcelExample/doc/excel_example.png create mode 100644 AppExamples/misc/ExcelExample/icon.png create mode 100644 AppExamples/misc/ExcelExample/license/license.txt create mode 100644 AppExamples/misc/ExcelExample/metainfo.json create mode 100644 AppExamples/misc/ExcelExample/scripts/example_project_keywords.xlsx create mode 100644 AppExamples/misc/ExcelExample/scripts/export_file.gdlg create mode 100644 AppExamples/misc/ExcelExample/scripts/export_project_keywords.py create mode 100644 AppExamples/misc/ExcelExample/scripts/import_file.gdlg create mode 100644 AppExamples/misc/ExcelExample/scripts/import_project_keywords.py create mode 100644 AppExamples/misc/ExcelExample/scripts/modules/requirements.txt create mode 100644 AppExamples/misc/ExcelExample/scripts/no_project.gdlg diff --git a/AppExamples/misc/ExcelExample/doc/Documentation.md b/AppExamples/misc/ExcelExample/doc/Documentation.md new file mode 100644 index 0000000..c97784b --- /dev/null +++ b/AppExamples/misc/ExcelExample/doc/Documentation.md @@ -0,0 +1,237 @@ +# ExcelExample + +Excel import/export example + +![Excel Example Figure](excel_example.png) + +## Short description + +This example demonstrates how to read and write Excel files from an App. The Excel file access is implemented using [openpyxl](https://pypi.org/project/openpyxl/). + +For demonstration purposes, project keywords are read from or written to an Excel file, but the example can be used as a template for other items. + +![Define Project Keywords Dialog](../../howtos/project_keywords/assets/define_project_keywords.png) + +## Prerequisite + +Both example scripts check if a project has been opened and quit with an error message dialog if this is not the case: + +```{code-block} python +if not hasattr(gom.app, 'project'): + gom.script.sys.execute_user_defined_dialog (file='no_project.gdlg') + quit(0) +``` + +## Excel read example: `import_project_keywords.py` + +Two packages are imported from `openpyxl`: + +```{code-block} python +from openpyxl import load_workbook +from openpyxl.utils.cell import coordinate_from_string, column_index_from_string +``` + +The current project keywords and their values are listed with: + +```{code-block} python +print("-- Current keywords --") +for k in gom.app.project.project_keywords: + print(f"{k}='{gom.app.project.get(k)}'") +``` + +A dialog is used to request the Excel file to be opened: + +```{code-block} python +RESULT=gom.script.sys.execute_user_defined_dialog (file='dialog.gdlg') +print("\nOpening", RESULT.file) +``` + +The workbook is opened from the Excel file and a worksheet object `ws` is created: + +```{code-block} python +wb = load_workbook(filename = RESULT.file) +ws = wb['Sheet'] +``` + +As a tradeoff between simplicity and flexibility, the script allows to configure the cells which contain keywords, but assumes that the keyword descriptions and values are located at fixed positions in the adjacent cells: + +```{code-block} python +# Cells containing the keywords +# - descriptions are expected in column+1 +# - values are expected in column+2 +layout = [ + "A2", + "A3", + "A4", + #... +] +``` + +Cells can be accessed by their coordinates (e.g. "A1") or by row and column. The method `coordinate_from_string()` splits the coordinate into row and column (e.g. `coordinate_from_string("A1") => ("A", 1)`). The method `column_index_from_string()` converts a column name into +a column index (e.g. `column_index_from_string("A") => 1`). + +```{code-block} python +# Get keyword by cell name, e.g. cell="A1" +key = ws[cell].value + +# Get column as a string +col, row = coordinate_from_string(cell) + +# Get column index +col = column_index_from_string(col) + +# Keyword description - next to keyword +desc = ws.cell(row=row, column=col+1).value + +# Value - next to keyword description +val = ws.cell(row=row, column=col+2).value +``` + +In the array `gom.app.project.project_keywords`, the keywords have the prefix `user_`, but this prefix must be omitted for the method `gom.script.sys.set_project_keywords()`. + +The script distinguishes the following cases: +1. The keyword in the Excel file is new +2. The keyword in the Excel file already exists, but its value has changed +3. The keyword in the Excel file already exists, but its description has changed +4. The keyword in the Excel file already exists and remains unchanged + +```{code-block} python +ukw = "user_" + key +if not ukw in gom.app.project.project_keywords: + print(f"New keyword {key}='{val}' added") + gom.script.sys.set_project_keywords(keywords={key:val}, keywords_description={key:desc}) +else: + ex_val = gom.app.project.get(ukw) + ex_desc = gom.app.project.get(f'description({ukw})') + if (val == ex_val) and (desc == ex_desc): + print(f"Existing keyword {key}='{val}' - not changed") + else: + if val != ex_val: + print(f"Existing keyword {key}='{ex_val}' changed to '{val}'") + gom.script.sys.set_project_keywords(keywords={key:val}) + if desc != ex_desc: + print(f"Existing keyword {key} - description '{ex_desc}' changed to '{desc}'") + gom.script.sys.set_project_keywords(keywords_description={key:desc}) +``` + +The steps described above are repeated for all Excel cells listed in `layout[]`: + +```{code-block} python +for cell in layout: + # Get keyword, description and value + #... + + # Convert data type, if required + #... + + # Add or update project keywords + #... +``` + +Finally, the updated project keywords are listed: + +```{code-block} python +print("\n-- Updated keywords --") +for k in gom.app.project.project_keywords: + print(f"{k}='{gom.app.project.get(k)}'") +``` + +## Excel write example: `export_project_keywords.py` + +Two packages are imported from `openpyxl`: + +```{code-block} python +from openpyxl import Workbook +from openpyxl.styles import Font +``` + +The following code creates a workbook and writes text into three cells of the worksheet as a table header: + +```{code-block} python +# Create a workbook +wb = Workbook() + +# Select the active worksheet +ws = wb.active + +# Create table header +ws['A1'] = "Project Keyword" +ws['B1'] = "Description" +ws['C1'] = "Value" +``` + +Next, the table header is formatted and the column widths are adjusted: + +```{code-block} python +# Change table header layout +for cell in ['A1', 'B1', 'C1']: + ws[cell].font = Font(bold=True, size=16) + ws.column_dimensions['A'].width = 30 + ws.column_dimensions['B'].width = 70 + ws.column_dimensions['C'].width = 50 +``` + +The script iterates over all project keywords and gets the values and keyword descriptions. A type conversion has been implemented for date entries. The method `ws.append([key, val, desc])` writes the variables `key`, `val` and `desc` - which are combined into an array - to the next three cells of the worksheet. + +```{code-block} python +for key in gom.app.project.project_keywords: + val = gom.app.project.get(key) + desc = gom.app.project.get(f'description({key})') + + # Remove prefix 'user_' from key + key = key[5:] + print(f"{key} - {desc}: {val}") + + # Special case - convert gom.Date to datetime-object + # and format Excel cell accordingly + if type(val) is gom.Date: + val = datetime.datetime(val.year, val.month, val.day) + ws.append([key, desc, val]) + ws.cell(row=ws.max_row, column=2).number_format = "yyyy-mm-dd" + else: + ws.append([key, desc, val]) +``` + +Specific cells can be selected with `ws.cell(row=, column=)`. This can be used for +* Changing the content: `ws.cell(row=ws.max_row+2, column=1).value = f'Exported from {gom.app.application_name}'` +* Setting the font: `ws.cell(row=ws.max_row, column=1).font = Font(size=8)` +* Adjusting the cell format: `ws.cell(row=ws.max_row, column=2).number_format = "yyyy-mm-dd"` +* etc. + +Finally the prepared spreadsheet is written to a file. The file path has been requested previously with a dialog. + +```{code-block} python +wb.save(RESULT1.file) +``` + +To handle the common case that the Excel file cannot been written by the script, because it it currently opened in the Excel software, a loop with exception handling has been implemented: + +```{code-block} python +# Repeat until file was written successfully or +# user has cancelled. +while True: + try: + # File selection dialog + RESULT1=gom.script.sys.execute_user_defined_dialog (dialog={ + #... + }) + except gom.BreakError: + # User has cancelled + break + + # ... create spreadsheet with project keywords ... + + # Try to write Excel file, this will fail if the file is still open in Excel! + retry = False + try: + wb.save(RESULT1.file) + except PermissionError: + retry = True + # Notification dialog + RESULT=gom.script.sys.execute_user_defined_dialog (dialog={ + #... + }) + + if not retry: + break +``` diff --git a/AppExamples/misc/ExcelExample/doc/README.md b/AppExamples/misc/ExcelExample/doc/README.md new file mode 100644 index 0000000..e95f65d --- /dev/null +++ b/AppExamples/misc/ExcelExample/doc/README.md @@ -0,0 +1,9 @@ +## ExcelExample + +This App is part of the [ZEISS INSPECT Python API App Examples](https://github.com/ZEISS/zeiss-inspect-app-examples/tree/main/AppExamples). + +See [App documentation](Documentation.md) for details. + +You can [download this App](https://software-store.zeiss.com/products/apps/ExcelExample) from the [ZEISS Quality Software Store](https://software-store.zeiss.com). + +The ZEISS INSPECT App develomment documentation can be found on [ZEISS IQS GitHub](https://zeissiqs.github.io/zeiss-inspect-addon-api/2025/index.html). \ No newline at end of file diff --git a/AppExamples/misc/ExcelExample/doc/excel_example.png b/AppExamples/misc/ExcelExample/doc/excel_example.png new file mode 100644 index 0000000000000000000000000000000000000000..8aad9974b975dfe8f7b6bd3f42e78dc1f3a19758 GIT binary patch literal 52430 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 literal 0 HcmV?d00001 diff --git a/AppExamples/misc/ExcelExample/license/license.txt b/AppExamples/misc/ExcelExample/license/license.txt new file mode 100644 index 0000000..bb42913 --- /dev/null +++ b/AppExamples/misc/ExcelExample/license/license.txt @@ -0,0 +1,296 @@ +ZEISS Add-Ons / Apps End User License Agreement (EULA) +====================================================== + +English version. See below for German version. +Englische Version. Siehe unten für die Deutsche Version. + +1. Introduction + +1.1 General information + +This End User License Agreement for Add-Ons / Apps ("EULA Add-Ons / Apps") is a legal agreement between "you" (either an individual or a legal entity, hereinafter referred to as "licensee" or "customer") and ZEISS ("ZEISS" or "licensor") (each individually a "party" and collectively the "parties") for your use of ZEISS software products. The agreement sets forth all rights and obligations for both licensee and ZEISS and governs your use of all Software Products installed or provided by ZEISS. Any amendment to this agreement must be in writing and in accordance with the terms and conditions contained herein. By paying the applicable license fee(s) and by downloading, installing or using the software, you agree that this agreement shall be enforceable against you in the same manner as a written, negotiated contract signed by you. If you do not agree to the terms of this agreement, you are not authorized and may not download, install or use any ZEISS software products. + +In order to use the ZEISS software products and services, the licensee must have the following: + +(a) a so-called valid subscription agreement or + +(b) a valid license from ZEISS. + +Furthermore, individual software products + +(a) which are based on a subscription agreement and / or + +(b) with a server-based licensing solution + +require and use a secure connection of the application computer to the ZEISS infrastructure and/or the "Cloud Services". + +1.2 The licensor is ZEISS, the licensee is the end customer. The licensor grants the licensee a non-exclusive, non-transferable right to use the "software product", which includes the specific software program and the subsequent extensions, updates, patches and associated documentation for internal company operation, as well as the associated manuals and software documentation. + +1.3 The software product may contain codes, objects and other intellectual property developed and licensed by licensors or third parties and integrated into the software product ("embedded third party software"). Any embedded third party software or open source code and open source licenses used shall not limit or impair the rights of use granted to licensee and may be accessed at any time within the respective software used. In individual cases, the respective license conditions can be made available by the licensor upon request at any time. + +1.4 Any terms and conditions of purchase of the licensee that conflict with or deviate from this agreement shall not become part of the agreement, even if the licensor does not expressly object to them. Amendments to the EULA must be expressly agreed in writing by both parties. + + +2. Term and termination / license fees + +2.1 The license agreement begins with license activation and ends with the period of use of the Pro Version or with the end of the payment period. + +2.2 The Licensor shall be entitled to terminate this license agreement and the corresponding rights of use with immediate effect if the licensee violates any provision of this license agreement or tacitly tolerates a violation of this license agreement by third parties or fails to fulfill its obligations under this license agreement or if the licensee files for insolvency or a change of control occurs at the licensee. + +2.3 Notwithstanding the foregoing, and unless otherwise agreed in this license agreement, this license agreement shall terminate automatically upon licensee's breach of any of its provisions. + +2.4 Under no circumstances shall license fees be fully or partially refundable upon termination or mutually agreed termination of this agreement, unless ZEISS is responsible for the early termination of this agreement. + + +3. Reproduction rights + +3.1 The licensee may reproduce the delivered software to the extent that the reproduction is necessary to use the software. Necessary reproductions of the software include, but are not limited to, the installation of the software product on the mass storage of the device in accordance with this license agreement and the loading of the software into the main memory of the computer. + +3.2 In addition, licensee shall be entitled to make copies for data backup purposes. This backup copy of the licensed software product must be marked as such. + +3.3 If, for reasons of data security or backup, a quick reactivation of the computer system, including the subject matter of the agreement, and the backup of the entire data stock, including the installed software product, are required after a total failure, licensee may create the maximum required number of backup copies. The data media concerned shall be appropriately marked. The backup copies may only be used for archiving purposes. + +3.4 The licensee is not entitled to make further copies or to instruct third parties to make further copies, in particular the licensee is not entitled to print out the program code with a printer or to make photocopies of the manual. + + +4. Resale and transfer + +4.1 The licensee is not entitled to rent, lease, lend or make the software product available to third parties within the scope of hosting or download options, unless the Licensor has expressly indicated or permitted this in writing. + +4.2 However, it is permitted to grant a right of use to third parties if they have to use the software product to the licensee’s specifications (like own employees). Independent third parties are excluded from use in any case. + +4.3 Transfer within legal entities or global groups of licensee: Provided that the transferring licensee and the receiving party are part of one legal entity or part of affiliated companies, the transfer is permitted provided that the receiving party agrees to these license terms. "Affiliate" means any legal entity that is directly or indirectly controlled by a Legal Entity or its parent company. "Control" for purposes of this license agreement means direct or indirect ownership of more than fifty percent (50%) of the stock of such entity or more than fifty percent (50%) direct or indirect participation in the decision-making body of such entity. + + +5. Back translation and program changes + +5.1 As a matter of principle, the licensee may not make any changes to the software product unless this is necessary to correct errors. The prerequisite is that this is done solely for the purpose of correcting errors that impair the functioning of the software. +In the latter case and if important program functions and working methods could be disclosed during the repair process, licensee may commission a commercially active third party to carry out the repair if this third party is not a potential competitor of licensor. +Insofar as the licensee makes changes to the software product in order to rectify errors, the licensor shall not assume any liability for the resulting consequences, in particular not through this authorization. + +5.2 The reverse translation of the licensed program code into other code forms (decompilation) and other types of reverse engineering of various different phases of software creation are permitted only to the extent that they serve to correct errors that impair the functioning of the software (in accordance with section 5.1). However, licensee may perform such decompilation only to the extent necessary for correction and, if applicable, in compliance with the terms and conditions contractually agreed with the owner of the copyright in this program. +Further, decompilation is permitted in cases to obtain information necessary for interoperability with an independently created computer program and only if such information cannot be obtained otherwise. + +5.3 A further prerequisite for the permission to reverse engineer is the performance of reverse engineering or program observation exclusively by means of procedures which the licensee is authorized to perform in accordance with this license agreement. In particular, the program code may in no case be printed out. + +5.4 All property rights and copyrights relating to the software product, the printed accompanying materials and all copies of the software product shall remain with the licensor or its suppliers. This software product is protected under German copyright law, U.S. copyright law and the provisions of international treaties. The licensee is not entitled to reproduce the printed materials accompanying the software. + + +5.5 The licensee shall not be entitled to remove, modify or add to any copyright notices or trademark notices placed by licensor. This includes, without limitation, all references in physical and/or electronic media or documents, in "setup wizards" or in "about..." dialog boxes, and/or in other references displayed on or activated via the Internet, in program code or other embodiments originally included in the software or otherwise created by licensor. + +6. Warranty and right of termination + +6.1 The licensor warrants with respect to the software product licensed to the licensee the performance set forth in the description, provided that the software product is installed in the intended system in compliance with the licensor's guidelines. + +6.2 The licensor shall correct errors in the software product, and in all manuals and other documents, within a reasonable period of time after receiving from the licensee the corresponding information on the error necessary to correct the error. Errors shall be remedied by rectification, which shall not be invoiced, or by replacement of the delivery, at the option of the licensor. + +6.3 The licensee's right of termination due to the non-executability of the software product may only be exercised after rectifications or replacements have been made twice without success. + +6.4 The licensor neither warrants nor guarantees the functionality of the programs created by third parties or the licensee / customer, nor the error-free execution of the programs with the software or on the licensor's systems. + + +7. Liability + +7.1 If the licensee is unable to use the software product in the manner specified in the agreement and the licensee is responsible for this due to the failure to implement or the incorrect implementation of suggestions and advice before or after signing the agreement or due to the breach of other contractual obligations, the provisions set forth in this agreement shall apply mutatis mutandis to the exclusion of any further claims by the licensee. + +For damages that do not occur to the software product, respectively not to the hardware and the connected device, the liability obligation of the licensor applies exclusively in the following cases, regardless of the respective legal ground: + +- willful misconduct, + +- gross negligence of its executive bodies or officers, + +- culpable damage to life, limb and health, in the event of errors, which the lLicensor has fraudulently concealed or which it has excluded under warranty, + +- software errors within the scope of liability for personal injury and property damage due to personally implemented objects, as set out in the product liability regulations applicable to them + +7.2 In the event of culpable breach of material contractual obligations, the licensor shall also be liable for gross negligence on the part of non-executive employees and for slight negligence. In the latter case, liability shall be limited to damages that are foreseeable and typical for this type of contract. + +7.3 In addition, the licensor, its employees and its vicarious agents shall be liable for data loss or changes due to program errors, limited to the extent that this would have been unavoidable if the licensee had complied with its obligation to make back-up copies regularly and at least once a day. + +7.4 In the event of claims based on copyright infringement, the licensor shall grant the licensee the right to continue using the software product or to make modifications to the software product so that copyright protection is ensured. If this is not commercially reasonable, the licensor shall take back the subject matter of the agreement and refund the license fee paid, less an amount corresponding to the duration of the previous use. This shall apply provided that the licensee notifies the licensor of this type of claim in writing without delay and allows licensor all legal remedies and out-of-court settlements. + +7.5 The licensee or its IT provider shall be liable for server interruptions, interruption of license allocation and other support cases that are not clearly attributable to an incorrectly created license. + +The licensee or its IT provider is responsible for maintaining the necessary number of licenses to provide its services. The licensor is not liable for interruptions in use and subsequent work / production stoppages. + + +7.6 Further liability claims of the licensee are expressly excluded. +7.7 The licensee is responsible for all problems arising from the use of the software product that are not directly caused by the licensor. Therefore, licensee is responsible for all data generated and produced during the use of the software product. Accordingly, licensee is obligated and responsible for compliance with the terms and conditions set forth in this license agreement. + + +8. Security measures + +The licensee shall take suitable measures to secure the software and, if applicable, the access data for online access against access by unauthorized third parties. In particular, all copies of the software as well as the access data shall be kept in a protected place. + + +9. Industrial property rights and copyrights + +9.1 If a third party asserts claims for infringement of an industrial property right or a copyright against the customer because the customer uses a software version, firmware supplement or associated documentation supplied by ZEISS, ZEISS shall be obligated to pay any cost and damage compensation amounts awarded to the owner of the property right by a court or awarded with the prior consent of ZEISS. This is subject to the condition that the customer informs ZEISS immediately in writing of such claims and that ZEISS reserves the right to all defensive measures and out-of-court settlements. The customer is obligated to support ZEISS in the defense to the best of its ability. Under these conditions, ZEISS shall generally procure for the customer the right to continue using the software version, firmware supplement or documentation. If this should not be possible under economically reasonable conditions, ZEISS shall be obligated, at its own discretion and at its own expense, either to modify or replace the relevant item in such a way that the property right is not infringed, or to take back the item and refund the remuneration paid for it less an amount taking into account the benefits derived. + +9.2 ZEISS shall have no obligations if property right infringements are caused by the fact that software versions , firmware supplements or documentation supplied by ZEISS are not used in the intended manner or are not used on the specific systems. + + +10. Export Control + +Licensee assumes responsibility for compliance with all applicable rules and regulations, including but not limited to the export control and sanctions regulations of the Federal Republic of Germany, the European Union and the United States of America. In particular, licensee agrees not to provide the software or any related technology or documentation or any part thereof, directly or indirectly, to any sanctioned country or to any sanctioned person or entity in violation of the foregoing. + +Licensee represents and guarantees that it will not use the software or any related technology or documentation or any portion thereof in violation of any applicable law or regulation. The licensee further agrees to indemnify and hold harmless licensor from and against any and all claims resulting from licensee's failure to comply with any of the foregoing applicable provisions. + + +11. Miscellaneous + +11.1 All verbal agreements, amendments, extensions or concretizations of these license conditions as well as the special characteristics of the assurances or agreements or arrangements made must be in writing to be legally effective. If these are drafted by representatives or vicarious agents of the Licensor, they shall only become legally binding upon approval by the Licensor. + +11.2 Should parts of this contract become invalid, this shall not affect the validity of the remaining parts of this contract. The ineffective part of this contract shall be replaced by its parties with legally permissible provisions that come as close as possible to the intention of the ineffective provisions. + +11.3 The laws of the Federal Republic of Germany shall apply to this contract, excluding the law on the international sale of goods and the rules of conflict of laws. + +Version from October 2023 + +----------------------------------------------------------------------------- + +ZEISS Add-Ons / Apps End User License Agreement (EULA) +====================================================== + +German version. See above for English version. +Deutsche Version. Siehe oben für die Englische Version. + +1. Einführung + +1.1 Allgemeine Informationen + +Diese Endbenutzer-Lizenzvereinbarung für Add-Ons / Apps (End User License Agreement, „EULA Add-Ons / Apps“) ist eine rechtsgültige Vereinbarung zwischen „Ihnen“ (entweder eine natürliche oder juristische Person, im Folgenden als „Lizenznehmer“ oder „Kunde“ bezeichnet) und ZEISS („ZEISS“ oder „Lizenzgeber“) (jeweils einzeln eine „Partei“ und zusammen die „Parteien“) für Ihre Nutzung von ZEISS Softwareprodukten. Die Vereinbarung legt alle Rechte und Pflichten sowohl für den Lizenznehmer als auch für ZEISS fest und regelt Ihre Nutzung aller Softwareprodukte, die von ZEISS installiert oder zur Verfügung gestellt werden. Jede Änderung dieser Vereinbarung muss schriftlich erfolgen und mit den hierin enthaltenen Bestimmungen und Bedingungen übereinstimmen. Durch die Zahlung der geltenden Lizenzgebühr(en) und durch das Herunterladen, die Installation oder die Nutzung der Software erklären Sie sich damit einverstanden, dass diese Vereinbarung Ihnen gegenüber gleichermaßen durchsetzbar ist wie ein schriftlicher, ausgehandelter und von Ihnen unterzeichneter Vertrag. Wenn Sie den Bedingungen dieser Vereinbarung nicht zustimmen, sind Sie nicht berechtigt und dürfen keine ZEISS Softwareprodukte herunterladen, installieren oder verwenden. + +Für die Nutzung der ZEISS Softwareprodukte und Leistungen muss der Lizenznehmer über Folgendes verfügen: + +(a) einen sog. gültigen Subscriptionvertrag oder + +(b) eine gültige Lizenz von ZEISS. + +Ferner erfordern und verwenden einzelne Softwareprodukte + +(a) die auf einem Subscriptionvertrag basieren und / oder + +(b) mit einer serverbasierten Lizenzlösung + +eine sichere Verbindung des Applikationsrechners mit der ZEISS Infrastruktur und / oder den „Cloud Services“. + +1.2 Lizenzgeber ist ZEISS Lizenznehmer ist der Endkunde. Der Lizenzgeber gewährt dem Lizenznehmer ein nicht ausschließliches, nicht übertragbares Nutzungsrecht für das „Softwareprodukt“, welches das spezielle Softwareprogramm und die damit nachfolgenden Erweiterungen, Updates, Patches und zugehörige Dokumentation für den unternehmensinternen Betrieb, wie auch die dazugehörigen Handbücher und Softwaredokumentation, einschließt. + +1.3 Das Softwareprodukt kann Codes, Objekte und anderes geistiges Eigentum enthalten, das von Lizenzgebern oder Dritter entwickelt und von diesen lizenziert und in das Softwareprodukt integriert wurde („Embedded Third Party Software“). Etwaig verwendete Embedded Third Party Software oder Open Source-Code und Open Source-Lizenzen beschränken oder beeinträchtigen die gewährten Nutzungsrechte des Lizenznehmers nicht und können jederzeit innerhalb der jeweils genutzten Software abgerufen werden. Im Einzelfall können die jeweiligen Lizenzbedingungen vom Lizenzgeber auf Anforderung jederzeit zur Verfügung gestellt werden. + +1.4 Entgegenstehende oder von dieser Vereinbarung abweichende Kaufbedingungen des Lizenznehmers werden nicht Vereinbarungsbestandteil, auch wenn der Lizenzgeber diesen nicht ausdrücklich widerspricht. Änderungen der EULA müssen schriftlich und ausdrücklich durch beide Parteien vereinbart werden. + + +2. Laufzeit und Kündigung / Lizenzgebühren + +2.1 Die Lizenzvereinbarung beginnt mit Lizenzaktivierung und endet mit der Nutzungsdauer der Pro Version oder mit dem Ende der Bezahldauer. + +2.2 Der Lizenzgeber ist berechtigt, diese Lizenzvereinbarung und die entsprechenden Nutzungsrechte mit sofortiger Wirkung zu kündigen, falls der Lizenznehmer eine Bestimmung dieser Lizenzvereinbarung verletzt oder eine Verletzung dieser Lizenzvereinbarung durch Dritte stillschweigend duldet oder seine Verpflichtungen aus dieser Lizenzvereinbarung nicht erfüllt oder falls der Lizenznehmer Insolvenz anmeldet oder bei dem Lizenznehmer ein Kontrollwechsel stattfindet. + +2.3 Ungeachtet der vorstehenden Bestimmungen und sofern in dieser Lizenzvereinbarung nicht anderweitig vereinbart, endet diese Lizenzvereinbarung automatisch bei Verletzung einer seiner Bestimmungen durch den Lizenznehmer. + +2.4 Unter keinen Umständen sind bei Kündigung oder einvernehmlicher Beendigung dieses Vertrages Lizenzgebühren vollständig oder teilweise erstattungsfähig, es sei denn ZEISS hat die vorzeitige Beendigung dieses Vertrages zu vertreten. + + +3. Vervielfältigungsrechte + +3.1 Der Lizenznehmer darf die gelieferte Software in dem Umfang vervielfältigen, in dem die Vervielfältigung zur Nutzung der Software erforderlich ist. Erforderliche Vervielfältigungen der Software sind unter anderem die Installation des Softwareprodukts auf dem Massenspeicher des Geräts gemäß diesem Lizenzvertrag und das Laden der Software in den Hauptspeicher des Computers. + +3.2 Außerdem ist der Lizenznehmer zur Anfertigung von Kopien zur Datensicherung berechtigt. Diese Sicherungskopie des lizenzierten Softwareprodukts muss als solche gekennzeichnet sein. + +3.3 Sind aus Gründen der Datensicherheit oder -sicherung nach einem Totalausfall eine schnelle Reaktivierung des Computersystems, des Vertragsgegenstands eingeschlossen, sowie die Sicherung des gesamten Datenbestands, des installierten Softwareprodukts eingeschlossen, erforderlich, so kann der Lizenznehmer die maximal erforderliche Anzahl an Sicherungskopien erstellen. Die betreffenden Datenmedien sind angemessen zu kennzeichnen. Die Sicherungskopien dürfen ausschließlich zu Archivierungszwecken genutzt werden. + +3.4 Der Lizenznehmer ist nicht berechtigt, weitere Kopien zu erstellen oder Dritte anzuweisen, weitere Kopien zu erstellen, insbesondere ist er nicht berechtigt, den Programmcode mit einem Drucker auszudrucken oder Fotokopien des Handbuchs zu erstellen. + + +4. Weiterverkauf und Übertragung + +4.1 Der Lizenznehmer ist nicht berechtigt, das Softwareprodukt Dritten im Rahmen von Hosting- oder Downloadoptionen zu vermieten, verleasen, verleihen oder zur Verfügung zu stellen, es sei denn, der Lizenzgeber hat dies ausdrücklich schriftlich angegeben oder erlaubt. + +4.2 Es ist jedoch gestattet, Dritten ein Nutzungsrecht einzuräumen, wenn diese das Softwareprodukt nach Maßgabe des Lizenznehmers (wie eigene Mitarbeiter) nutzen müssen. Von der Nutzung auf jeden Fall ausgeschlossen sind unabhängige Dritte. + +4.3 Übertragung innerhalb von Rechtspersonen oder globalen Konzernen des Lizenznehmers: Sofern der übertragende Lizenznehmer und die empfangende Partei Teil einer Rechtsperson oder Teil verbundener Unternehmen sind, ist die Übertragung gestattet, sofern die empfangende Partei diesen Lizenzbedingungen zustimmt. „Verbundene Unternehmen“ bedeutet jede Rechtsperson, die direkt oder indirekt von einer Rechtsperson oder deren Muttergesellschaft kontrolliert wird. „Kontrolle“ im Sinne dieses Lizenzvertrags bedeutet direkter oder indirekter Besitz von mehr als fünfzig Prozent (50 %) der Anteile an diesem Unternehmen oder mehr als fünfzig Prozent (50 %) direkter oder indirekter Beteiligung am Entscheidungsorgan dieses Unternehmens. + + +5. Rückübersetzung und Programmänderungen + +5.1 Der Lizenznehmer darf grundsätzlich keine Änderungen am Softwareprodukt vornehmen, außer wenn dies zur Behebung von Fehlern erforderlich ist. Voraussetzung ist, dass dies ausschließlich zum Zweck der Korrektur von Fehlern geschieht, die das Funktionieren der Software beeinträchtigen. +Im letzteren Fall und wenn beim Reparaturvorgang wichtige Programmfunktionen und Arbeitsmethoden offengelegt werden könnten, kann der Lizenznehmer einen gewerblich tätigen Dritten mit der Reparatur beauftragen, wenn dieser Dritte nicht ein potenzieller Wettbewerber des Lizenzgebers ist. +Soweit der Lizenznehmer zur Behebung von Fehlern Änderungen am Softwareprodukt vornimmt, übernimmt der Lizenzgeber, insb. auch nicht durch diese Freigabe, für die daraus resultierende Folgen keine Haftung. + +5.2 Die Rückübersetzung des lizenzierten Programmcodes in andere Codeformen (Dekompilierung) und andere Arten des Reverse Engineering verschiedener unterschiedlicher Phasen der Software-Erstellung sind nur insoweit zulässig, wie sie dazu dienen, Fehler zu korrigieren, die das Funktionieren der Software beeinträchtigen (entsprechend Ziffer 5.1). Der Lizenznehmer darf eine solche Dekompilierung jedoch nur in dem für die Berichtigung erforderlichen Ausmaß und gegebenenfalls unter Einhaltung der mit dem Inhaber des Urheberrechts an diesem Programm vertraglich festgelegten Bedingungen vornehmen. +Weiter ist eine Dekompilierung in Fällen zulässig, um Informationen zu gewinnen, die zur Interoperabilität mit einem unabhängig geschaffenen Computerprogramm erforderlich sind, und nur falls diese Informationen nicht anderweitig beschafft werden können. + +5.3 Weitere Voraussetzung für die Genehmigung zur Rückübersetzung ist die Durchführung des Reverse Engineering oder der Programmbeobachtung ausschließlich durch Verfahren, zu deren Ausführung der Lizenznehmer gemäß diesem Lizenzvertrag berechtigt ist. Insbesondere darf der Programmcode in keinem Fall ausgedruckt werden. 5.4 Alle Eigentums- und Urheberrechte in Bezug auf das Softwareprodukt, die gedruckten Begleitmaterialien und sämtliche Kopien des Softwareprodukts verbleiben beim Lizenzgeber oder seinen Lieferanten. Das vorliegende Softwareprodukt ist nach deutschem Urheberrecht, US-amerikanischem Urheberrecht und den Bestimmungen internationaler Verträge geschützt. Der Lizenznehmer ist nicht berechtigt, die der Software beiliegenden gedruckten Materialien zu vervielfältigen. + +5.5 Der Lizenznehmer ist nicht berechtigt, Hinweise zum Urheberrecht oder Markennennungen, die der Lizenzgeber angebracht hat, zu entfernen, zu ändern oder zu ergänzen. Dies beinhaltet ohne Einschränkungen alle Verweise in physischen und / oder elektronischen Medien oder Dokumenten, in „Setup-Assistenten" oder in den Dialogfeldern „Über...“ und / oder in anderen Verweisen, die im Internet dargestellt oder über das Internet aktiviert werden, im Programmcode oder anderen Ausführungsformen, die ursprünglich in der Software enthalten waren oder anderweitig vom Lizenzgeber erstellt wurden. + + +6. Gewährleistung und Kündigungsrecht + +6.1 Der Lizenzgeber gewährleistet in Bezug auf das für den Lizenznehmer lizenzierte Softwareprodukt die in der Beschreibung festgelegte Leistung, insofern das Softwareprodukt in dem vorgesehenen System unter Einhaltung der Richtlinien des Lizenzgebers installiert wird. + +6.2 Der Lizenzgeber beseitigt Fehler an dem Softwareprodukt, und in allen Handbüchern sowie anderen Dokumenten, innerhalb einer angemessenen Frist nach Erhalt der zur Fehlerbeseitigung notwendigen entsprechender Angaben vom zum Fehler Lizenznehmer. Fehler werden durch Nachbesserungen, die nicht in Rechnung gestellt werden, oder durch Ersatz der Lieferung, nach Wahl des Lizenzgebers, behoben. + +6.3 Das Kündigungsrecht des Lizenznehmers aufgrund der Nichtausführbarkeit des Softwareprodukts kann erst ausgeübt werden, wenn Nachbesserungen bzw. Ersatz zweimal erfolglos erfolgt sind. + +6.4 Der Lizenzgeber gibt weder eine Garantie noch eine Gewährleistung für die Funktionalität der von Drittanbietern oder dem Lizenznehmer / Kunden erstellten Programme, ebenso wenig wie auf das fehlerfreie Ausführen der Programme mit der Software oder auf den Systemen des Lizenzgebers. + + +7. Haftung + +7.1 Falls der Lizenznehmer das Softwareprodukt nicht auf die vertraglich festgelegte Weise nutzen kann und der Lizenznehmer dies aufgrund der unterlassenen oder falschen Umsetzung von Vorschlägen und Ratschlägen vor oder nach der Unterzeichnung des Vertrages oder aufgrund der Verletzung sonstiger vertraglicher Pflichten zu vertreten hat, so gelten unter Ausschluss weiterer Ansprüche des Lizenznehmers entsprechend die in diesem Vertrag dargelegten Regelungen. + +Für Schäden, die nicht am Softwareprodukt, beziehungsweise nicht an der Hardware und dem angeschlossenen Gerät entstehen, gilt die Haftungsverpflichtung des Lizenzgebers ausschließlich in den folgenden Fällen, unabhängig vom jeweiligen Rechtsgrund: + +- vorsätzliches Fehlverhalten, + +- grobe Fahrlässigkeit seiner ausführenden Organe oder leitenden Angestellten, + +- schuldhaft herbeigeführter Schaden des Lebens, des Körpers und der Gesundheit, bei Fehlern, die der Lizenzgeber arglistig verschwiegen, oder die er unter Gewährleistung ausgeschlossen hat, + +- Softwarefehler im Rahmen der Haftung bei Personen- und Sachschäden aufgrund persönlich implementierter Objekte, wie in den dafür zutreffenden Produkthaftungsregelungen dargelegt + +7.2 Bei schuldhafter Verletzung wesentlicher Vertragspflichten haftet der Lizenzgeber auch bei grober Fahrlässigkeit seitens nichtleitender Angestellter und bei leichter Fahrlässigkeit. Im letzteren Fall ist die Haftung auf Schäden begrenzt, die vorhersehbar und typisch für diese Art von Vertrag sind. + +7.3 Außerdem haften der Lizenzgeber, seine Mitarbeiter und seine Erfüllungsgehilfen für Datenverlust oder -änderungen aufgrund von Programmfehlern, beschränkt auf den Umfang, in dem dies unvermeidbar gewesen wäre, wenn der Lizenznehmer seiner Verpflichtung, regelmäßig und mindestens einmal täglich Sicherungskopien zu erstellen, nachgekommen wäre. + +7.4 Bei Ansprüchen aufgrund von Urheberrechtsverletzungen gewährt der Lizenzgeber dem Lizenznehmer das Recht zur weiteren Nutzung des Softwareprodukts oder zur Vornahme von Änderungen am Softwareprodukt, so dass der Schutz der Urheberrechte gewährleistet ist. Wenn dies nicht wirtschaftlich sinnvoll ist, so nimmt der Lizenzgeber den Vertragsgegenstand zurück und erstattet die gezahlte Lizenzgebühr, abzüglich eines der Dauer der vorherigen Nutzung entsprechenden Betrags. Dies gilt unter der Voraussetzung, dass der Lizenznehmer dem Lizenzgeber diese Art der Ansprüche unverzüglich schriftlich mitteilt und dem Lizenzgeber alle Rechtsmittel und außergerichtlichen Regelungen gestattet. + +7.5 Für Serverunterbrechungen, Unterbrechung der Lizenzzuteilung und sonstige Support-Fälle, die nicht eindeutig auf eine fehlerhaft erstellte Lizenz zurückzuführen sind, haftet der Lizenznehmer bzw. dessen IT-Provider.. +Der Lizenznehmer oder dessen IT-Provider ist verantwortlich für die Vorhaltung der notwendigen Anzahl an Lizenzen zur Erbringung seiner Leistungen. Der Lizenzgeber haftet nicht für Nutzungsunterbrechungen und nachfolgende Arbeits- / Produktionsausfälle. + +7.6 Weitergehende Haftungsansprüche des Lizenznehmers sind ausdrücklich ausgeschlossen. + +7.7 Der Lizenznehmer ist für alle aus der Nutzung des Softwareprodukts entstehenden Probleme verantwortlich, die nicht direkt durch den Lizenzgeber verursacht werden. Daher ist der Lizenznehmer für alle Daten verantwortlich, die bei der Nutzung des Softwareprodukts erzeugt und hergestellt werden. Der Lizenznehmer ist demnach zur beziehungsweise für die Einhaltung der in dieser Lizenzvereinbarung genannten Bedingungen verpflichtet und verantwortlich. + + +8. Sicherungsmaßnahmen + +Der Lizenznehmer wird die Software sowie gegebenenfalls die Zugangsdaten für den Onlinezugriff durch geeignete Maßnahmen vor dem Zugriff durch unbefugte Dritte sichern. Insbesondere sind sämtliche Kopien der Software sowie die Zugangsdaten an einem geschützten Ort zu verwahren. + + +9. Gewerbliche Schutzrechte und Urheberrechte + +9.1 Macht ein Dritter Ansprüche aus Verletzung eines gewerblichen Schutzrechtes oder eines Urheberrechts gegen den Kunden geltend, weil dieser eine von ZEISS gelieferte Softwareversion, Firmwareergänzung oder dazugehörige Dokumentation benutzt, ist ZEISS verpflichtet, etwaige dem Schutzrechtsinhaber gerichtlich zugesprochene oder mit vorheriger Zustimmung von ZEISS zugestandene Kosten- und Schadenersatzbeträge zu bezahlen. Vorausgesetzt ist dabei, dass der Kunde ZEISS unverzüglich schriftlich über derartige Ansprüche unterrichtet und ZEISS alle Abwehrmaßnahmen und außergerichtlichen Regelungen vorbehalten bleiben. Der Kunde ist verpflichtet, ZEISS bei der Abwehr nach besten Kräften zu unterstützen. Unter diesen Voraussetzungen wird ZEISS dem Kunden grundsätzlich das Recht zum weiteren Gebrauch der Softwareversion, Firmwareergänzung oder Dokumentation verschaffen. Falls dies zu wirtschaftlich angemessenen Bedingungen nicht möglich sein sollte, ist ZEISS verpflichtet, nach eigener Wahl und auf eigene Kosten den entsprechenden Gegenstand entweder derart abzuändern oder zu ersetzen, dass das Schutzrecht nicht verletzt wird, oder den Gegenstand zurückzunehmen und das dafür bezahlte Entgelt abzüglich eines die gezogenen Nutzungen berücksichtigenden Betrages zu erstatten. + +9.2 ZEISS hat keine Verpflichtungen, falls Schutzrechtsverletzungen dadurch hervorgerufen werden, dass von ZEISS gelieferte Softwareversionen, Firmwareergänzungen oder Dokumentation nicht in der vorgesehenen Weise verwendet oder nicht auf den bestimmten Systemen eingesetzt wird. + + +10. Exportkontrolle + +Der Lizenznehmer übernimmt die Verantwortung für die Einhaltung aller anwendbaren Bestimmungen und Vorschriften, einschließlich, aber nicht beschränkt auf die Exportkontroll- und Sanktionsbestimmungen der Bundesrepublik Deutschland, der Europäischen Union sowie der Vereinigten Staaten von Amerika. Insbesondere bestätigt der Lizenznehmer, die Software sowie jedwede damit verbundene Technologie oder Dokumentation oder Teile davon weder direkt noch indirekt unter Nichtbefolgung der vorgenannten Bestimmungen in sanktionierte Länder oder an sanktionierte natürliche oder juristische Personen bereitzustellen. + +Der Lizenznehmer sichert dem Lizenzgeber zu, dass er die Software sowie jedwede damit verbundene Technologie oder Dokumentation oder Teile davon nicht unter Verletzung vorgenannter anwendbarer Gesetze oder Vorschriften verwenden wird. Weiterhin verpflichtet sich der Lizenznehmer den Lizenzgeber von allen Ansprüchen freizustellen und schadlos zu halten, welche aus der Nichteinhaltung vorgenannter anwendbarer Bestimmungen resultiert. + + +11. Sonstiges + +11.1 Sämtliche mündliche Vereinbarungen, Änderungen, Erweiterungen oder Konkretisierungen dieser Lizenzbedingungen sowie die besonderen Eigenschaften der getroffenen Zusicherungen oder Vereinbarungen oder Absprachen bedürfen zu ihrer Rechtswirksamkeit der Schriftform. Falls diese von Vertretern oder Erfüllungsgehilfen des Lizenzgebers abgefasst sind, so werden sie erst mit der Genehmigung des Lizenzgebers rechtlich bindend. + +11.2 Sollten Teile dieses Vertrags unwirksam werden, so berührt dies nicht die Wirksamkeit der übrigen Teile dieses Vertrags. Der unwirksame Teil dieses Vertrags soll durch seine Parteien durch gesetzlich zulässige Bestimmungen ersetzt werden, die der Absicht der unwirksamen Bestimmungen am nächsten kommt. + +11.3 Auf diesen Vertrag sind die Gesetze der Bundesrepublik Deutschland anwendbar, unter Ausschluss des Gesetzes über den internationalen Warenkauf und der Regeln des Kollisionsrechts. + +Stand Oktober 2023 diff --git a/AppExamples/misc/ExcelExample/metainfo.json b/AppExamples/misc/ExcelExample/metainfo.json new file mode 100644 index 0000000..c31cd0d --- /dev/null +++ b/AppExamples/misc/ExcelExample/metainfo.json @@ -0,0 +1,17 @@ +{ + "author": "Carl Zeiss GOM Metrology GmbH", + "description": "", + "labels": [], + "licensing": { + "licenses": [], + "product-codes": [] + }, + "software-revision": "0000", + "software-version": "ZEISS INSPECT 2025", + "tags": [ + "import", "export", "project-keywords" + ], + "title": "ExcelExample", + "uuid": "b206780c-2ac5-488b-bf6a-f48263cbdbe5", + "version": "1.0.0" +} \ No newline at end of file diff --git a/AppExamples/misc/ExcelExample/scripts/example_project_keywords.xlsx b/AppExamples/misc/ExcelExample/scripts/example_project_keywords.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ec28abc81adb8dcdc1a7ff26c618873c98082a81 GIT binary patch literal 10126 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

No project loaded!

", + "translatable": true + }, + "tooltip": { + "id": "", + "text": "", + "translatable": true + }, + "type": "display::text", + "wordwrap": false + } + ] + ], + "control": { + "id": "Close" + }, + "embedding": "always_toplevel", + "position": "automatic", + "size": { + "height": 139, + "width": 223 + }, + "sizemode": "automatic", + "style": "", + "title": { + "id": "", + "text": "Excel Example", + "translatable": true + } +} \ No newline at end of file