เรียกใช้ Python ใน Calc ผ่านระบบมาโครของ LibreOffice

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

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

เหตุใดสคริปต์ Python ทั่วไปจึงมองไม่เห็นสเปรดชีตที่เปิดอยู่?

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

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

จะเพิ่มมาโคร Python ลงใน Calc ได้อย่างไร?

1. ค้นหาโฟลเดอร์สคริปต์ Python ของผู้ใช้

ให้ใช้ตำแหน่ง "มาโครของฉัน"ส่วนตัวหากคุณต้องการสคริปต์ที่สามารถเรียกใช้จากเอกสาร LibreOffice ที่เปิดอยู่ใดๆ ก็ได้สำหรับบัญชีผู้ใช้ของคุณ เอกสาร LibreOffice ระบุโฟลเดอร์นี้ไว้%APPDATA%\LibreOffice\4\user\Scripts\pythonบน Windows, $HOME/.config/libreoffice/4/user/Scripts/pythonLinux และ macOS หากScripts/pythonโฟลเดอร์นี้ยังไม่มีอยู่ ให้สร้างขึ้นมา เอกสาร อ้างอิงตำแหน่งสคริปต์ยังอธิบายถึงคอนเทนเนอร์มาโครอื่นๆ ด้วย ได้แก่ มาโครแอปพลิเคชัน และมาโครที่ฝังอยู่ในเอกสาร

ไฟล์ Python ชื่อ hello_calc.py อยู่ในโฟลเดอร์ Scripts/python ของผู้ใช้ใน LibreOffice
วางโมดูลมาโครไว้ในโฟลเดอร์ Scripts/python ของผู้ใช้ เพื่อให้ LibreOffice สามารถแสดงรายการมาโครนั้นในส่วน "มาโครของฉัน" ได้

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

2. สร้างและส่งออกฟังก์ชันทดสอบขนาดเล็ก

เปิดโปรแกรมแก้ไขข้อความธรรมดา สร้างhello_calc.pyโฟลเดอร์ตามที่ระบุไว้ข้างต้น แล้วเพิ่มข้อความต่อไปนี้:

def hello_calc(*args):
    doc = XSCRIPTCONTEXT.getDocument()
    sheet = doc.Sheets[0]
    sheet.getCellRangeByName("A1").setString("Hello from Python")

g_exportedScripts = (hello_calc,)

ฟังก์ชันนี้จะดึงเอกสารที่เชื่อมต่อกับมาโครในปัจจุบัน เลือกชีตแรก และเขียนข้อความทดสอบที่ไม่เป็นอันตรายลงในเซลล์ A1 บรรทัดสุดท้ายมีความสำคัญ: หากไม่มีทูเปิลที่ส่งออก ฟังก์ชันอาจไม่ปรากฏเป็นมาโครที่สามารถเรียกใช้งานได้ บันทึกไฟล์เป็นข้อความธรรมดาโดยใช้.pyส่วนขยาย .txt ไม่ใช่เอกสารข้อความแบบ Rich Text หรือไฟล์ที่ลงท้ายด้วย.py.txt.txt

โค้ดมาโคร Python ที่ใช้ XSCRIPTCONTEXT และแสดงรายการ hello_calc ใน g_exportedScripts
ฟังก์ชันที่ส่งออกจะใช้ XSCRIPTCONTEXT เพื่อเข้าถึงเอกสารที่เปิดอยู่และเขียนค่าทดสอบลงในเซลล์ A1

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

3. เปิดไฟล์ Calc แล้วเรียกใช้ฟังก์ชันที่ส่งออก

  1. เปิดสเปรดชีตทดสอบใน Calc ใช้สำเนาหรือเวิร์กบุ๊กเปล่าในระหว่างการพัฒนา
  2. เลือกเครื่องมือ > มาโคร > เรียกใช้มาโคร
  3. ในรายการไลบรารี ให้ขยายMy Macrosเลือกโมดูล Python และเลือกhello_calcชื่อมาโครจากรายการ
  4. คลิกปุ่มRun

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

ตัวเลือกมาโครของ LibreOffice โดยไฮไลต์ hello_calc ไว้ในส่วนมาโครของฉัน และมองเห็นปุ่มเรียกใช้
เลือกฟังก์ชัน hello_calc ที่ส่งออกแล้วในส่วน "มาโครของฉัน" จากนั้นเรียกใช้จาก Calc
โปรแกรม LibreOffice Calc แสดงข้อความ "Hello from Python" ในเซลล์ A1 ที่เลือกไว้
ค่าที่ปรากฏให้เห็นในเซลล์ A1 ยืนยันว่ามาโครทดสอบได้เข้าถึงเอกสาร Calc และเปลี่ยนแปลงเซลล์แล้ว

จะทำอย่างไรหากมาโครหายไปหรือดูเหมือนว่าจะไม่มีผลอะไรเลย?

ควรตรวจสอบตามลำดับเหล่านี้แทนที่จะเปลี่ยนการตั้งค่าความปลอดภัยโดยรวม:

  • โมดูลไม่ปรากฏในรายการ:โปรดตรวจสอบว่าไฟล์อยู่ในScripts/pythonพาธของผู้ใช้ที่ถูกต้อง มี.pyนามสกุลไฟล์ และมีg_exportedScriptsข้อมูลในรูปแบบทูเปิลที่สะกดถูกต้องหรือไม่ เปิดกล่องโต้ตอบมาโครอีกครั้ง หาก LibreOffice ยังคงไม่แสดงไฟล์ที่เพิ่มใหม่ ให้ปิดและเริ่มต้น LibreOffice ใหม่ จากนั้นตรวจสอบอีกครั้ง
  • ชื่อมาโครหายไป:ตรวจสอบให้แน่ใจว่าทูเปิลที่ส่งออกมีอ็อบเจ็กต์ฟังก์ชันอยู่ด้วย ตัวอย่างเช่น(hello_calc,)เครื่องหมายจุลภาคทำให้ทูเปิลนี้เป็นทูเปิล Python ที่มีรายการเดียว
  • ไม่มีอะไรปรากฏในเทอร์มินัล:เอาต์พุตจากคำสั่งprint()ไม่พร้อมใช้งานเมื่อเรียกใช้มาโคร Python จากกล่องโต้ตอบมาโครมาตรฐาน การทดสอบข้างต้นเขียนลงในเซลล์ A1 ดังนั้นผลลัพธ์จึงมองเห็นได้ในชีต สำหรับการดีบักแบบโต้ตอบ เชลล์ของ APSO จะแสดงเอาต์พุต
  • การนำเข้าล้มเหลว:การติดตั้งแพ็กเกจสำหรับ Python ในระบบของคุณไม่ได้รับประกันว่ารันไทม์ Python ของ LibreOffice จะสามารถนำเข้าได้ แพ็กเกจต้องมีอยู่ในเส้นทาง Python ของรันไทม์ คำแนะนำการนำเข้าอย่างเป็นทางการอธิบายถึงเส้นทางโมดูลของผู้ใช้และโมดูลที่ใช้ร่วมกัน เริ่มต้นด้วยการทดสอบมาโครโดยไม่ต้องนำเข้าแพ็กเกจเสริม
  • จะมีคำเตือนด้านความปลอดภัยปรากฏขึ้น:โปรดเรียกใช้เฉพาะสคริปต์ที่คุณเขียนหรือตรวจสอบและไว้วางใจเท่านั้น การรักษาความปลอดภัยของมาโครมีไว้เพื่อจำกัดโค้ดที่ไม่ปลอดภัย อย่าลดระดับความปลอดภัยโดยรวมเพียงเพื่อเรียกใช้มาโครในเอกสารที่ไม่คุ้นเคยหากต้องการทำความเข้าใจคำเตือน โปรดศึกษา ตัวเลือกความปลอดภัยของมาโคร ใน LibreOffice

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

คุณจะตรวจสอบได้อย่างไรว่ามาโครทำงานถูกต้อง?

หลังจากคลิกปุ่ม Run แล้ว ให้ดูที่เซลล์ A1 ในชีตแรก เซลล์นั้นควรมีข้อความว่า"Hello from Python"และแถบสูตรควรแสดงข้อความเดียวกันเมื่อเลือกเซลล์ A1 หากเซลล์ยังคงไม่เปลี่ยนแปลง ให้ตรวจสอบว่าเวิร์กบุ๊กที่ต้องการใช้งานอยู่ และเลือกมาโครจาก "My Macros" แล้ว เมื่อการทดสอบขั้นต่ำนี้สำเร็จแล้ว ให้แทนที่ข้อความทดสอบด้วยการคำนวณจริงของคุณ และทดสอบกับสำเนาของเวิร์กบุ๊กก่อนที่จะนำไปใช้กับข้อมูลสำคัญ

ฝากความเห็น

เรียกใช้ Python ใน Calc ผ่านระบบมาโครของ LibreOffice

เรียกใช้ Python ใน Calc ผ่านระบบมาโครของ LibreOffice

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

ปกป้องข้อความของผู้เขียนที่เลือกไว้ด้วยรหัสผ่านประจำส่วน

ปกป้องข้อความของผู้เขียนที่เลือกไว้ด้วยรหัสผ่านประจำส่วน

ล็อกข้อความเฉพาะส่วนเพื่อป้องกันการแก้ไขตามปกติ ในขณะที่ยังคงใช้งานส่วนที่เหลือของเอกสาร Writer ได้ และเรียนรู้ว่าเมื่อใดการเข้ารหัสไฟล์จึงเป็นทางเลือกที่ดีกว่า

ทำให้ข้อความในสเปรดชีตอ่านง่ายขึ้นในโหมดมืดของ LibreOffice Calc

ทำให้ข้อความในสเปรดชีตอ่านง่ายขึ้นในโหมดมืดของ LibreOffice Calc

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

LibreOffice Calc แสดงสูตรเป็นข้อความใช่หรือไม่? กู้คืนผลลัพธ์กลับมา

LibreOffice Calc แสดงสูตรเป็นข้อความใช่หรือไม่? กู้คืนผลลัพธ์กลับมา

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

ผสานจดหมายจากนักเขียนเข้ากับโลโก้และฟิลด์ในสเปรดชีต

ผสานจดหมายจากนักเขียนเข้ากับโลโก้และฟิลด์ในสเปรดชีต

สร้างจดหมายผสานข้อมูลที่สามารถนำกลับมาใช้ซ้ำได้ด้วย Writer โดยใช้ข้อมูลผู้รับจาก Calc และรูปภาพที่ฝังไว้ร่วมกัน จากนั้นดูตัวอย่างและบันทึกจดหมายส่วนบุคคล

จำกัดการวินิจฉัยเพิ่มเติมและการอัปเดตข้อมูลใน LibreOffice

จำกัดการวินิจฉัยเพิ่มเติมและการอัปเดตข้อมูลใน LibreOffice

ปิดการแสดงสถิติการอัปเดตและการแจ้งเตือนรายงานข้อผิดพลาดของ LibreOffice จากนั้นตรวจสอบว่าการตั้งค่าเหล่านั้นครอบคลุมอะไรบ้างและวิธีการตรวจสอบความถูกต้อง

ใช้ Regex ใน LibreOffice Writer เพื่อแก้ไขข้อความแบบเป็นชุด

ใช้ Regex ใน LibreOffice Writer เพื่อแก้ไขข้อความแบบเป็นชุด

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

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

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

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

คืนค่าแบบอักษร Calibri และ Arial ใน LibreOffice โดยไม่ต้องเดา

คืนค่าแบบอักษร Calibri และ Arial ใน LibreOffice โดยไม่ต้องเดา

ติดตั้งฟอนต์ Linux ที่เข้ากันได้กับระบบเมตริก หรือแมปฟอนต์สำรองของ LibreOffice โดยคำนึงถึงข้อกำหนดด้านลิขสิทธิ์ฟอนต์และความแตกต่างของเค้าโครงของ Microsoft ด้วย

สร้างไฟล์ PDF ที่กรอกข้อมูลได้จากแบบฟอร์มใน LibreOffice Writer

สร้างไฟล์ PDF ที่กรอกข้อมูลได้จากแบบฟอร์มใน LibreOffice Writer

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