เรียกใช้ 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" แล้ว เมื่อการทดสอบขั้นต่ำนี้สำเร็จแล้ว ให้แทนที่ข้อความทดสอบด้วยการคำนวณจริงของคุณ และทดสอบกับสำเนาของเวิร์กบุ๊กก่อนที่จะนำไปใช้กับข้อมูลสำคัญ

ฝากความเห็น

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

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

ล็อกข้อความเฉพาะส่วนเพื่อป้องกันการแก้ไขตามปกติ ในขณะที่ยังคงใช้งานส่วนที่เหลือของเอกสาร 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 ที่ผู้รับสามารถกรอกข้อมูลและบันทึกได้

สร้างไฟล์ PDF ด้วย LibreOffice โดยคงแบบอักษรที่คุณใช้ไว้

สร้างไฟล์ PDF ด้วย LibreOffice โดยคงแบบอักษรที่คุณใช้ไว้

แก้ไขปัญหาฟอนต์หายไปหรือถูกแทนที่ในไฟล์ PDF ที่สร้างด้วย LibreOffice Writer เลือกโปรไฟล์การส่งออกที่ถูกต้อง และตรวจสอบว่าฟอนต์ใดบ้างที่ฝังอยู่ในไฟล์ก่อนที่จะแชร์