วิธีเรียกใช้สคริปต์ Python ในมาโครของ LibreOffice Calc

ใช่แล้ว LibreOffice Calc สามารถรันโค้ด Python เป็นมาโครภายในกระบวนการของ LibreOffice ได้ และมาโคร Basic ของ LibreOffice ก็สามารถเรียกใช้ฟังก์ชัน Python ผ่านเฟรมเวิร์กการเขียนสคริปต์ของ LibreOffice ได้เช่นกัน หากเป้าหมายของคุณคือการอ่านหรือแก้ไขเซลล์ในสเปรดชีตที่เปิดอยู่ การใช้มาโคร Python ภายในกระบวนการมักจะเป็นจุดเริ่มต้นที่ง่ายที่สุด ใช้การเรียกจาก Basic ไปยัง Python เมื่อมาโคร Basic ที่มีอยู่ควรส่งต่อภารกิจหนึ่งไปยังฟังก์ชัน Python ที่นำกลับมาใช้ใหม่ได้

วิธีการเหล่านี้แตกต่างจากการเรียกใช้สคริปต์ Python ของระบบทั่วไปด้วยคำสั่งเชลล์ กระบวนการ Python ภายนอกปกติจะไม่ได้รับออบเจ็กต์เอกสารของ Calc โดยอัตโนมัติ สำหรับการเข้าถึงเวิร์กบุ๊ก ให้เรียกใช้มาโคร Python ผ่าน LibreOffice หรือเชื่อมต่อกระบวนการภายนอกกับอินสแตนซ์ LibreOffice ผ่าน UNO โดยเจาะจง

“เรียกใช้ Python ภายในมาโคร Calc” หมายความว่าอย่างไร?

LibreOffice รองรับภาษาสคริปต์หลายภาษาผ่านเฟรมเวิร์กการเขียนสคริปต์ ในมาโคร Python นั้น LibreOffice จะจัดเตรียมออบเจ็กต์บริบท UNO ซึ่งช่วยให้สคริปต์สามารถเข้าถึงเอกสารปัจจุบันและชีตต่างๆ ได้ มาโคร Python คือฟังก์ชันใน.pyโมดูล โดยทูเปิลของโมดูลg_exportedScriptsจะระบุฟังก์ชันที่ LibreOffice ควรแสดงเป็นมาโครที่สามารถเรียกใช้งานได้

มาโคร Python สามารถทำงานได้ด้วยตัวเองจากเมนูมาโครของ Calc โดยไม่จำเป็นต้องเรียกใช้จากภาษา Basic หากคุณมีมาโคร Basic อยู่แล้วและต้องการให้เรียกใช้ Python คุณสามารถใช้ Script Provider ของ LibreOffice หรือSession.ExecutePythonScriptบริการ ScriptForge ที่ใหม่กว่าเพื่อเชื่อมต่อสองภาษาเข้าด้วยกันได้

คุณควรเลือกวิธีการใด?

  • ใช้มาโคร Python โดยตรงเมื่อภารกิจส่วนใหญ่ใช้ Python และต้องการเอกสาร Calc ปัจจุบัน วิธีนี้ช่วยหลีกเลี่ยงการเปลี่ยนภาษาและแก้ไขข้อผิดพลาดได้ง่ายที่สุดเนื่องจากเป็นสคริปต์เดียว
  • เรียกใช้ Python จาก Basicเมื่อคุณมีโค้ด Basic ปุ่ม หรือเหตุการณ์เอกสารอยู่แล้ว ซึ่งควรคงอยู่เช่นเดิม และคุณต้องการตัวช่วย Python เพื่อทำการคำนวณหรือดำเนินการข้อมูลเฉพาะอย่าง
  • ใช้กระบวนการ Python ภายนอกเมื่อคุณต้องการสภาพแวดล้อมการพัฒนาแยกต่างหาก หรือแพ็กเกจ Python ที่ไม่ได้รวมอยู่ใน LibreOffice ตั้งค่าการเชื่อมต่อ UNO อย่างชัดเจน อย่าคิดว่าสคริปต์ที่เริ่มต้นจากเทอร์มินัลจะสามารถมองเห็นสเปรดชีตที่เปิดอยู่ได้

ตัวอย่างเช่น เครื่องมือทำความสะอาดสเปรดชีตขนาดเล็กสามารถเขียนได้ทั้งหมดในรูปแบบมาโคร Python หากปุ่ม Basic ที่มีอยู่แล้วเรียกใช้รายงาน ให้คงมาโครของปุ่มนั้นไว้และให้มันเรียกใช้ฟังก์ชัน Python ที่คำนวณผลรวมของรายงาน

คุณจะสร้างมาโคร Python ที่แก้ไขเซลล์ใน Calc ได้อย่างไร?

LibreOffice จะจัดเก็บสคริปต์ Python ส่วนบุคคลไว้ในโปรไฟล์ผู้ใช้ สคริปต์ที่ใช้งานได้ทั่วทั้งแอปพลิเคชันไว้ในไดเร็กทอรีการติดตั้ง และสคริปต์เอกสารไว้กับเอกสาร สำหรับการทดสอบครั้งแรก สคริปต์ส่วนบุคคลนั้นสะดวกกว่า เพราะสามารถเข้าถึงได้จากเอกสาร LibreOffice ใดๆ ก็ได้ที่เปิดอยู่สำหรับผู้ใช้คนเดียวกัน อย่างไรก็ตาม สคริปต์นี้จะไม่ถูกแนบไปกับไฟล์ ODS ดังนั้นบุคคลอื่นจะไม่ได้รับสคริปต์นี้ไปพร้อมกับสเปรดชีตโดยอัตโนมัติ

ค้นหาโฟลเดอร์สคริปต์ Python ส่วนตัวสำหรับระบบของคุณในวิธีใช้ LibreOffice ภายใต้หัวข้อ “การจัดระเบียบและตำแหน่งของสคริปต์ Python” ตำแหน่งทั่วไป ได้แก่%APPDATA%\LibreOffice\4\user\Scripts\pythonบน Windows และ~/.config/libreoffice/4/user/Scripts/pythonบน Linux โปรไฟล์จริงอาจแตกต่างกันไป ให้ใช้ตำแหน่งที่ระบุไว้สำหรับการติดตั้งของคุณแทนที่จะสร้างไดเร็กทอรีโปรไฟล์ที่สองโดยการคาดเดา

สร้างไฟล์ชื่อcalc_tools.pyในโฟลเดอร์สคริปต์ Python ส่วนตัว จากนั้นเพิ่มตัวอย่างง่ายๆ นี้ลงไป:

def double_a1(args=None):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.getCurrentController().getActiveSheet()

    source = sheet.getCellRangeByName("A1")
    target = sheet.getCellRangeByName("B1")
    target.setValue(source.getValue() * 2)

g_exportedScripts = (double_a1,)

โค้ดนี้จะอ่านค่าตัวเลขในเซลล์ A1 ของชีตที่ใช้งานอยู่ และเขียนค่าดังกล่าวสองเท่าลงในเซลล์ B1 XSCRIPTCONTEXTโค้ดนี้จะถูกส่งไปยังมาโคร Python ของ LibreOffice ในระหว่างการทำงาน ไม่ใช่ตัวแปรส่วนกลางของ Python ทั่วไปเมื่อเปิดไฟล์เดียวกันนอก LibreOffice ฟังก์ชันสาธารณะนี้ถูกระบุไว้ในรายการg_exportedScriptsดังนั้นจึงปรากฏในตัวเลือกมาโคร

บันทึกไฟล์ จากนั้นเปิดหรือกลับไปที่ Calc แล้วเลือกTools > Macros > Run Macrosขึ้นอยู่กับเวอร์ชันของ LibreOffice หรือการแปลแพลตฟอร์ม ชื่อเมนูอาจเป็นเอกพจน์ เลือกMy Macros > calc_tools > double_a1แล้วเรียกใช้ ป้อนตัวเลขใน A1 ก่อน จากนั้นตรวจสอบว่า B1 มีค่าที่คูณสองแล้วหรือไม่ หากโมดูลไม่ปรากฏ ให้ตรวจสอบว่านามสกุลไฟล์เป็น . .pypy ไฟล์อยู่ในโฟลเดอร์ Python ของโปรไฟล์ที่ถูกต้อง และติดตั้งการสนับสนุนการเขียนสคริปต์ Python แล้ว การรีสตาร์ท LibreOffice หลังจากเพิ่มโมดูลใหม่สามารถช่วยรีเฟรชรายการสคริปต์ได้

มาโคร Basic สามารถเรียกใช้ฟังก์ชัน Python ได้อย่างไร?

สำหรับการเรียกใช้ฟังก์ชันจากภาษา Basic ไปยัง Python ให้วางโมดูล Python ไว้ในโฟลเดอร์สคริปต์ส่วนตัว แล้วเรียกใช้ฟังก์ชันนั้นผ่านSessionบริการของ ScriptForge ตัวอย่างนี้จะบวกค่าสองค่าใน Python และเขียนผลลัพธ์ลงในเซลล์ B1 ในชีต Calc ปัจจุบัน

ในcalc_tools.pyให้กำหนดฟังก์ชัน:

def add_values(first, second):
    return float(first) + float(second)

g_exportedScripts = (add_values,)

จากนั้นสร้างมาโครพื้นฐานใน Calc แล้วใช้คำสั่งต่อไปนี้:

Sub RunPythonHelper()
    Dim session As Object
    Dim result As Variant
    Dim sheet As Object

    session = CreateScriptService("Session")
    result = session.ExecutePythonScript( _
        session.SCRIPTISPERSONAL, _
        "calc_tools.py$add_values", _
        12, 30)

    sheet = ThisComponent.CurrentController.getActiveSheet()
    sheet.getCellRangeByName("B1").setValue(result)
End Sub

เรียกใช้RunPythonHelperจากตัวเลือกมาโครพื้นฐาน หากการเรียกใช้สำเร็จ เซลล์ B1 ควรแสดงค่า 42 การอ้างอิงสคริปต์มีรูปแบบดังนี้module.py$function_name; สำหรับโมดูลในโฟลเดอร์ย่อยหรือตำแหน่งจัดเก็บอื่น ให้ใช้ไวยากรณ์และค่าคงที่ตำแหน่งที่ระบุไว้ในเอกสารสำหรับ ScriptForge เวอร์ชันนั้น เก็บอาร์กิวเมนต์และค่าส่งคืนไว้ในประเภทข้อมูลที่ทั้งสองภาษาสามารถแสดงได้อย่างชัดเจน เช่น ตัวเลข สตริง และลำดับอย่างง่าย

CreateScriptServiceและตัวช่วยเซสชัน ScriptForge ที่มีเอกสารกำกับไว้นั้นมีอยู่ใน LibreOffice เวอร์ชันใหม่ๆ แต่ชื่อเมนูและส่วนประกอบที่รวมมาด้วยอาจแตกต่างกันในเวอร์ชันเก่าหรือเวอร์ชันที่บรรจุมาพร้อมกับการแจกจ่าย หากบริการนี้ไม่พร้อมใช้งาน ให้ใช้วิธีการจัดหาสคริปต์ UNO ที่มีเอกสารกำกับไว้ใน LibreOffice ซึ่งจะได้รับXScriptURI ของสคริปต์และเรียกใช้ หลีกเลี่ยงการคัดลอกส่วนของโค้ดไปยังตำแหน่งมาโครอื่นโดยไม่เปลี่ยนการตั้งค่าตำแหน่งก่อน

โค้ด Python ควรเป็นส่วนตัว แชร์ หรือฝังอยู่ในระบบ?

พื้นที่จัดเก็บเหมาะสมที่สุดการแลกเปลี่ยน
มาโครของฉัน / โปรไฟล์ผู้ใช้เครื่องมือที่คุณสร้างขึ้นเองและนำกลับมาใช้ซ้ำได้ในเอกสารต่างๆไม่ได้รวมไว้โดยอัตโนมัติเมื่อคุณส่งสเปรดชีต
มาโครแอปพลิเคชันสคริปต์ที่จัดการโดยผู้ใช้หลายคนในการติดตั้งครั้งเดียวโดยทั่วไปแล้ว การติดตั้งหรือการบำรุงรักษาจะต้องใช้สิทธิ์ผู้ดูแลระบบ
มาโครเอกสารโค้ดที่ตั้งใจจะเชื่อมโยงกับเอกสารฉบับเดียวผู้รับอาจต้องอนุญาตให้ใช้มาโคร ทดสอบความเข้ากันได้และความปลอดภัยบนเวอร์ชัน LibreOffice เป้าหมาย

สำหรับการทำงานเป็นทีม ให้ตัดสินใจว่าผู้รับจะได้รับและเชื่อถือโค้ดอย่างไรก่อนที่จะสร้างเวิร์กบุ๊กโดยใช้มาโครส่วนตัว หากตรรกะ Python ต้องอยู่ในสเปรดชีต ให้ทดสอบการจัดเก็บมาโครและข้อความแจ้งเตือนด้านความปลอดภัยของเอกสารในเวอร์ชัน LibreOffice เดียวกันกับที่ผู้รับใช้ สำหรับการใช้งานแบบมีการจัดการ ผู้ดูแลระบบสามารถจัดแพ็กเกจสคริปต์สำหรับผู้ใช้หรือแจกจ่ายส่วนขยายภายใต้การควบคุมซอฟต์แวร์ปกติขององค์กรได้

เหตุใดมาโครจึงอาจหายไปหรือทำงานล้มเหลว?

  • ตัวเลือกหรือโมดูล Python หายไปในบางระบบปฏิบัติการ GNU/Linux เฟรมเวิร์กการเขียนสคริปต์ Python ของ LibreOffice เป็นแพ็กเกจเสริม ตรวจสอบคำแนะนำในการติดตั้ง LibreOffice ในระบบปฏิบัติการนั้นๆ หากมาโคร Python ไม่ปรากฏในกล่องโต้ตอบมาโคร
  • สคริปต์ถูกบันทึกไว้ในโปรไฟล์ที่ไม่ถูกต้อง LibreOffice สามารถใช้โปรไฟล์ผู้ใช้ได้หลายโปรไฟล์ โปรดตรวจสอบเส้นทางโปรไฟล์สำหรับการติดตั้งที่กำลังทำงานอยู่ และบันทึกโมดูลไว้ในScripts/pythonไดเร็กทอรี นั้น
  • ฟังก์ชันนี้ไม่ได้ถูกส่งออกเพิ่มg_exportedScriptsฟังก์ชันนี้ลงในตัวเลือกมาโครที่คุณต้องการเรียกใช้ ตรวจสอบให้แน่ใจว่าไวยากรณ์ของทูเพิลมีเครื่องหมายจุลภาคปิดท้ายสำหรับทูเพิลที่มีรายการเดียว
  • สคริปต์นี้ทำงานอยู่นอกโปรแกรม LibreOffice XSCRIPTCONTEXTมีไว้สำหรับมาโครที่เรียกใช้โดย LibreOffice ไม่ใช่เมื่อเปิดไฟล์เดียวกันด้วยpythonคำสั่งของระบบ ให้ใช้ตัวเรียกใช้มาโครหรือตั้งค่าการเชื่อมต่อ UNO ตามที่ได้มีการบันทึกไว้
  • ระบบรักษาความปลอดภัยมาโครจะบล็อกโค้ดที่ฝังอยู่ตรวจสอบการตั้งค่าความปลอดภัยของมาโครใน LibreOffice และเปิดใช้งานเฉพาะโค้ดจากแหล่งที่คุณเชื่อถือเท่านั้น การลดระดับความปลอดภัยโดยรวมไม่ใช่ทางลัดในการแก้ไขปัญหาที่ดี
  • โมดูลที่นำเข้าไม่สามารถมองเห็นบริบทของเอกสารได้เอกสาร LibreOffice XSCRIPTCONTEXTจะไม่ส่งต่อบริบทนี้ไปยังโมดูลที่นำเข้า ควรส่งออบเจ็กต์เอกสารหรือชีตที่จำเป็นไปยังฟังก์ชันตัวช่วยแทนที่จะคาดหวังให้โมดูลที่นำเข้าอ่านค่าส่วนกลางนั้น
  • ไม่มีข้อความแสดงผลใดๆ ปรากฏบนคอนโซลเอาต์พุตมาตรฐานของ Python ไม่สามารถใช้งานได้เมื่อเรียกใช้มาโครจากเมนู เครื่องมือ > มาโคร หากต้องการรับผลลัพธ์ ให้เขียนผลลัพธ์ลงในเซลล์ ใช้บริการกล่องโต้ตอบของ LibreOffice หรือบันทึกไปยังเส้นทางไฟล์ที่กำหนดไว้

คุณจะตรวจสอบผลลัพธ์อย่างปลอดภัยได้อย่างไร?

ทดสอบโดยใช้สำเนาของสเปรดชีตและข้อมูลป้อนเข้าที่ทราบแล้ว ตรวจสอบว่ามาโคร Python ปรากฏในตัวเรียกใช้งาน เรียกใช้หนึ่งครั้ง และเปรียบเทียบเซลล์ผลลัพธ์กับผลลัพธ์ที่คำนวณด้วยมือ สำหรับการเรียกใช้จาก Basic ไปยัง Python ให้ทดสอบข้อมูลป้อนเข้าอย่างง่ายหนึ่งรายการและตรวจสอบว่าค่าที่ส่งคืนถูกเขียนลงในชีตที่ต้องการ หลีกเลี่ยงการเริ่มต้นด้วยสคริปต์ที่ลบชีต เขียนทับช่วงข้อมูลขนาดใหญ่ หรือเรียกใช้คำสั่งของระบบปฏิบัติการ

เมื่อการทดสอบสำเร็จแล้ว ให้ตัดสินใจว่าจะติดตั้งสคริปต์บนคอมพิวเตอร์เครื่องอื่นอย่างไร และบันทึกไลบรารี Python ที่จำเป็นหรือข้อสมมติเกี่ยวกับเวอร์ชันของ LibreOffice สภาพแวดล้อม Python ที่มาพร้อมกับ LibreOffice นั้นใช้สำหรับมาโครแบบ in-process แพ็กเกจที่ติดตั้งสำหรับตัวแปลภาษา Python ของระบบอื่นอาจไม่สามารถใช้งานได้ หากคุณต้องการแพ็กเกจจากตัวแปลภาษาอื่น ให้ใช้วิธีการแบบ external-process/UNO และกำหนดค่าการเชื่อมต่อดังกล่าวอย่างรอบคอบ

เอกสารอ้างอิงอย่างเป็นทางการ

ฝากความเห็น

วิธีเชื่อมต่อ ONLYOFFICE Desktop Editors กับ ownCloud Server

วิธีเชื่อมต่อ ONLYOFFICE Desktop Editors กับ ownCloud Server

เชื่อมต่อ ONLYOFFICE Desktop Editors กับเซิร์ฟเวอร์ ownCloud ของคุณ ลงชื่อเข้าใช้ เปิดไฟล์บนคลาวด์ จัดการการเชื่อมต่อ และแก้ไขปัญหาการตั้งค่าทั่วไป

วิธีแก้ไขปัญหาการใช้งาน CPU สูงใน Collabora Online จาก loolwsd / coolwsd

วิธีแก้ไขปัญหาการใช้งาน CPU สูงใน Collabora Online จาก loolwsd / coolwsd

แก้ไขปัญหาการใช้งาน CPU สูงใน Collabora Online โดยการระบุโปรเซสชุดเครื่องมือที่ทำงานหนัก ตรวจสอบเมตริกและบันทึก ปรับแต่งการทำงานพร้อมกันและการล้างข้อมูล และตรวจสอบการแก้ไขอย่างปลอดภัย

วิธีปรับแต่งแบรนด์ ONLYOFFICE Docs ด้วยโลโก้และสีของคุณเอง

วิธีปรับแต่งแบรนด์ ONLYOFFICE Docs ด้วยโลโก้และสีของคุณเอง

เรียนรู้วิธีปรับแต่งแบรนด์ ONLYOFFICE Docs ด้วยโลโก้ส่วนหัวและสีของอินเทอร์เฟซ รวมถึงข้อจำกัดของใบอนุญาต การตั้งค่าธีม JSON เส้นทาง Docker และการทดสอบ

แก้ไขปัญหาการมองเห็นข้อความในโหมดมืดใน LibreOffice Calc

แก้ไขปัญหาการมองเห็นข้อความในโหมดมืดใน LibreOffice Calc

แก้ไขปัญหาข้อความที่อ่านยากใน LibreOffice Calc โดยตรวจสอบธีมของแอป แบบอักษรและสีเติมของเซลล์ สไตล์ และการจัดรูปแบบตามเงื่อนไข จากนั้นตรวจสอบผลลัพธ์การพิมพ์

แก้ไขข้อผิดพลาด “เอกสารถูกล็อกโดยผู้ใช้ที่ไม่รู้จัก” ใน LibreOffice

แก้ไขข้อผิดพลาด “เอกสารถูกล็อกโดยผู้ใช้ที่ไม่รู้จัก” ใน LibreOffice

ล้างคำเตือนการล็อกผู้ใช้ที่ไม่รู้จักของ LibreOffice อย่างปลอดภัย ตรวจสอบเซสชันที่ใช้งานอยู่ ป้องกันสำเนา ลบเฉพาะการล็อกที่หมดอายุซึ่งได้รับการตรวจสอบแล้ว และทดสอบเอกสาร

แก้ไขข้อความภาษาอาหรับและฮิบรูที่เขียนจากขวาไปซ้ายใน LibreOffice Writer

แก้ไขข้อความภาษาอาหรับและฮิบรูที่เขียนจากขวาไปซ้ายใน LibreOffice Writer

แก้ไขข้อความภาษาอาหรับหรือฮิบรูที่จัดเรียงหรือผสมกับภาษาอังกฤษไม่ถูกต้องใน LibreOffice Writer เปิดใช้งานการจัดวางข้อความที่ซับซ้อน กำหนดทิศทางย่อหน้า และตรวจสอบผลลัพธ์

เปรียบเทียบฟังก์ชัน VLOOKUP กับ XLOOKUP ใน LibreOffice Calc: คู่มือสำหรับผู้เริ่มต้นใช้งาน

เปรียบเทียบฟังก์ชัน VLOOKUP กับ XLOOKUP ใน LibreOffice Calc: คู่มือสำหรับผู้เริ่มต้นใช้งาน

เรียนรู้การใช้งาน VLOOKUP และ XLOOKUP ใน LibreOffice Calc รวมถึงการค้นหาแบบตรงกันทุกประการ การค้นหาทางซ้าย ผลลัพธ์ที่ไม่พบ การค้นหาแบบย้อนกลับ ทางเลือกอื่นนอกเหนือจาก INDEX/MATCH และข้อผิดพลาดที่พบบ่อย

วิธีแก้ไขปัญหา “การตรวจสอบหลักฐาน WOPI ล้มเหลว” ใน Collabora Online

วิธีแก้ไขปัญหา “การตรวจสอบหลักฐาน WOPI ล้มเหลว” ใน Collabora Online

แก้ไขปัญหาการตรวจสอบความถูกต้องของหลักฐาน WOPI ใน Collabora Online โดยตรวจสอบคีย์การค้นหา การหมุนเวียนคีย์ URL พร็อกซี การประทับเวลา และรายการอนุญาตโฮสต์

วิธีเปิดใช้งานการติดตามการเปลี่ยนแปลงโดยค่าเริ่มต้นใน ONLYOFFICE Docs

วิธีเปิดใช้งานการติดตามการเปลี่ยนแปลงโดยค่าเริ่มต้นใน ONLYOFFICE Docs

เปิดใช้งานการติดตามการเปลี่ยนแปลงสำหรับทุกคนในเอกสาร ONLYOFFICE รักษาสถานะการใช้งานไว้หลังจากเปิดเอกสารใหม่ และทำความเข้าใจข้อจำกัดของการตั้งค่าเริ่มต้นแบบทั่วโลก

วิธีตั้งค่าการหมดเวลาเมื่อไม่ได้ใช้งานสำหรับเซสชันการแก้ไขใน Collabora

วิธีตั้งค่าการหมดเวลาเมื่อไม่ได้ใช้งานสำหรับเซสชันการแก้ไขใน Collabora

เปรียบเทียบการตั้งค่าการหมดเวลาต่อการดู การไม่โฟกัส การไม่มีการใช้งานเอกสาร การบันทึกอัตโนมัติ และพร็อกซีของ Collabora Online จากนั้นเลือกและตรวจสอบการตั้งค่าสำหรับการใช้งานของคุณ