52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
import ezdxf
|
|
import openpyxl
|
|
import os
|
|
import sys
|
|
|
|
def nacti_data_z_excelu(soubor, listname="List1"):
|
|
wb = openpyxl.load_workbook(soubor, data_only=True)
|
|
sheet = wb[listname]
|
|
body = []
|
|
|
|
for row in sheet.iter_rows(min_row=2, values_only=True):
|
|
if row[0] and row[1] is not None and row[2] is not None:
|
|
label = str(row[0])
|
|
try:
|
|
x = float(row[1])
|
|
y = float(row[2])
|
|
z = float(row[3]) if len(row) > 3 and row[3] is not None else 0
|
|
body.append((label, x, y, z))
|
|
except ValueError:
|
|
continue
|
|
return body
|
|
|
|
def exportuj_do_dxf(body, vystup):
|
|
doc = ezdxf.new()
|
|
msp = doc.modelspace()
|
|
|
|
doc.layers.new(name="BODY", dxfattribs={"color": 7})
|
|
doc.layers.new(name="POPISKY", dxfattribs={"color": 1})
|
|
|
|
for label, x, y, z in body:
|
|
msp.add_point((x, y, z), dxfattribs={"layer": "BODY"})
|
|
msp.add_text(
|
|
label,
|
|
dxfattribs={"layer": "POPISKY"}).set_pos((x + 2, y + 2), align="LEFT") # Posun textu od bodu
|
|
|
|
doc.saveas(vystup)
|
|
|
|
if __name__ == "__main__":
|
|
if len(sys.argv) != 3:
|
|
print("Použití: python excel_to_dxf_hotovy.py vstup.xlsx vystup.dxf")
|
|
sys.exit(1)
|
|
|
|
excel_soubor = sys.argv[1]
|
|
vystup_nazev = sys.argv[2]
|
|
|
|
slozka = os.path.dirname(os.path.abspath(__file__))
|
|
excel_cesta = os.path.join(slozka, excel_soubor)
|
|
vystup_cesta = os.path.join(slozka, vystup_nazev)
|
|
|
|
body = nacti_data_z_excelu(excel_cesta)
|
|
exportuj_do_dxf(body, vystup_cesta)
|
|
print(f"Soubor {vystup_nazev} byl úspěšně vytvořen ve složce: {slozka}") |