วิธีบันทึกสเปรดชีตเป็น CSV ใน Python

วิธีบันทึกสเปรดชีตเป็น CSV ใน Python

ปัญหา

บันทึกเวิร์กบุ๊ก Excel (.xlsx) เป็นไฟล์ CSV โดยใช้ Aspose.Cells FOSS ใน Python โหลดเวิร์กบุ๊กด้วย Workbook() แล้วเรียก save_as_csv() เพื่อเขียนเวิร์กชีตที่ใช้งานอยู่ไปยังไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาค หรือส่งออบเจ็กต์ CSVSaveOptions เพื่อควบคุมตัวคั่น การเข้ารหัส และพฤติกรรมการใส่เครื่องหมายคำพูด

ข้อกำหนดเบื้องต้น

ในการบันทึกสเปรดชีตเป็น CSV โดยใช้ Aspose.Cells FOSS ใน Python ตรวจสอบให้แน่ใจว่าสภาพแวดล้อมของคุณตรงตามข้อกำหนดต่อไปนี้

  • ติดตั้ง Python 3.7 หรือใหม่กว่า
  • ติดตั้ง Aspose.Cells FOSS ผ่าน pip install aspose-cells-foss>=26.3.1
  • นำเข้าไลบรารีโดยใช้ from aspose.cells_foss import Workbook
  • ความรู้พื้นฐานเกี่ยวกับการจัดการไฟล์ใน Python

ขั้นตอนการบันทึก

ขั้นตอนที่ 1: ติดตั้งไลบรารี

ติดตั้ง Aspose.Cells FOSS จาก PyPI ไม่จำเป็นต้องมีไฟล์ลิขสิทธิ์สำหรับการใช้งาน FOSS

pip install aspose-cells-foss

ขั้นตอนที่ 2: โหลดเวิร์กบุ๊ก

สร้างอินสแตนซ์ Workbook ด้วยเส้นทางไปยังไฟล์ .xlsx ที่มีอยู่ คอนสตรักเตอร์รับพารามิเตอร์ password ที่เป็นทางเลือกสำหรับเวิร์กบุ๊กที่ได้รับการป้องกัน

from aspose.cells_foss import Workbook

workbook = Workbook("input.xlsx")

หากต้องการทำงานกับเวิร์กบุ๊กใหม่ ให้ละเว้นเส้นทางไฟล์:

from aspose.cells_foss import Workbook

workbook = Workbook()
worksheet = workbook.worksheets[0]

# Populate some cells
worksheet.cells["A1"].value = "Product"
worksheet.cells["B1"].value = "Price"
worksheet.cells["A2"].value = "Widget"
worksheet.cells["B2"].value = 9.99
worksheet.cells["A3"].value = "Gadget"
worksheet.cells["B3"].value = 24.95

ขั้นตอนที่ 3: บันทึกชีตที่ใช้งานอยู่เป็น CSV

เรียก Workbook.save_as_csv() ด้วยเส้นทางเอาต์พุตที่ต้องการ เมธอดเขียนเวิร์กชีตแรก (ที่ใช้งานอยู่) ตามค่าเริ่มต้น

workbook.save_as_csv("output.csv")

หรือใช้เมธอด Workbook.save() ทั่วไป — Aspose.Cells FOSS อนุมานรูปแบบ CSV จากนามสกุล .csv:

workbook.save("output.csv")

ทั้งสองการเรียกให้ผลลัพธ์เหมือนกันเมื่อไม่จำเป็นต้องมีตัวเลือกที่กำหนดเอง

ขั้นตอนที่ 4: บันทึกด้วยตัวเลือก CSV

Workbook.save_as_csv() รับอินสแตนซ์ CSVSaveOptions ที่เป็นทางเลือกเป็นอาร์กิวเมนต์ที่สอง สร้างอินสแตนซ์ CSVSaveOptions จาก aspose.cells_foss.csv_handler และส่งผ่านตรงๆ เพื่อควบคุมพฤติกรรมการส่งออก เช่น การเลือกตัวคั่นหรือการเข้ารหัสที่ไม่ใช่ค่าเริ่มต้น

from aspose.cells_foss import Workbook
from aspose.cells_foss.csv_handler import CSVSaveOptions

workbook = Workbook("input.xlsx")

# Create options instance — configure attributes per your environment's needs
options = CSVSaveOptions()

workbook.save_as_csv("output_custom.csv", options)

เมื่อไม่ส่ง CSVSaveOptions save_as_csv() จะใช้ค่าเริ่มต้นในตัวของไลบรารี (ตัวคั่นเครื่องหมายจุลภาค การเข้ารหัส UTF-8) ส่งออบเจ็กต์ตัวเลือกเมื่อใดก็ตามที่คุณต้องการแทนที่ค่าเริ่มต้นเหล่านั้นด้วยโปรแกรม

ขั้นตอนที่ 5: ส่งออกเวิร์กชีตเฉพาะ

เมื่อเวิร์กบุ๊กมีหลายชีต ชีตที่ใช้งานอยู่จะถูกส่งออก ใช้ Workbook.set_active_worksheet() เพื่อเลือกชีตที่จะส่งออกก่อนบันทึก

from aspose.cells_foss import Workbook

workbook = Workbook("multi_sheet.xlsx")

# Export the second worksheet (index 1)
workbook.set_active_worksheet(1)
workbook.save_as_csv("sheet2_output.csv")

หากต้องการส่งออกทุกชีตไปยังไฟล์ CSV ของตัวเอง ให้วนซ้ำ workbook.worksheets:

from aspose.cells_foss import Workbook

workbook = Workbook("multi_sheet.xlsx")

for index in range(len(workbook.worksheets)):
    ws = workbook.get_worksheet_by_index(index)
    workbook.set_active_worksheet(index)
    workbook.save_as_csv(f"sheet_{ws.name}.csv")

ตัวอย่างที่สมบูรณ์

ตัวอย่างแบบสแตนด์อโลนต่อไปนี้สร้างเวิร์กบุ๊ก เติมข้อมูลตัวอย่าง และบันทึกเป็นทั้ง CSV มาตรฐานและ CSV ที่คั่นด้วยเครื่องหมายอัฒภาค

from aspose.cells_foss import Workbook
from aspose.cells_foss.csv_handler import CSVSaveOptions

# Create workbook and populate data
workbook = Workbook()
worksheet = workbook.worksheets[0]

headers = ["Name", "Department", "Salary"]
rows = [
    ["Alice", "Engineering", 95000],
    ["Bob",   "Marketing",   72000],
    ["Carol", "Finance",     81000],
]

for col, header in enumerate(headers):
    col_letter = chr(ord("A") + col)
    worksheet.cells[f"{col_letter}1"].value = header

for row_idx, row in enumerate(rows, start=2):
    for col_idx, val in enumerate(row):
        col_letter = chr(ord("A") + col_idx)
        worksheet.cells[f"{col_letter}{row_idx}"].value = val

# Save as standard CSV (default options)
workbook.save_as_csv("employees.csv")

# Save with explicit CSVSaveOptions instance
options = CSVSaveOptions()
workbook.save_as_csv("employees_custom.csv", options)

print("CSV files written successfully.")

ปัญหาทั่วไป

ไฟล์เอาต์พุตว่างเปล่า

หากไฟล์ CSV เอาต์พุตว่างเปล่าหรือมีเฉพาะบรรทัดว่าง ให้ตรวจสอบว่าค่าเซลล์ถูกกำหนดก่อนที่จะเรียก save_as_csv() เมธอดนี้ส่งออกเวิร์กชีตที่ใช้งานอยู่ — ยืนยันว่าชีตที่ถูกต้องเป็นชีตที่ใช้งานอยู่โดยใช้ workbook.get_active_worksheet()

ปัญหาการเข้ารหัส (อักขระที่ไม่สามารถอ่านได้)

เมื่อเปิด CSV ใน Excel และเห็นอักขระที่เสียหาย ให้ตรวจสอบการเข้ารหัสที่ใช้ระหว่างการส่งออก Aspose.Cells FOSS ใช้ UTF-8 ตามค่าเริ่มต้น Excel บน Windows อาจคาดหวัง Byte Order Mark (BOM) เพื่อรับรู้การเข้ารหัสอย่างถูกต้อง กำหนดค่าการเข้ารหัสผ่าน CSVSaveOptions และส่งไปยัง save_as_csv()

เวิร์กบุ๊กหลายชีตส่งออกเพียงชีตเดียว

CSV เป็นรูปแบบตารางเดียว สามารถบันทึกได้เพียงหนึ่งเวิร์กชีตต่อไฟล์ ส่งออกแต่ละชีตแยกกันโดยใช้ set_active_worksheet(index) ดังที่แสดงในขั้นตอนที่ 5

เซลล์ที่มีตัวคั่น

หากค่าเซลล์มีอักขระตัวคั่น (เช่น เครื่องหมายจุลภาคในเอาต์พุตที่คั่นด้วยเครื่องหมายจุลภาค) Aspose.Cells FOSS จะใส่เครื่องหมายคำพูดล้อมรอบค่าโดยอัตโนมัติระหว่างการส่งออก ใช้ CSVSaveOptions เพื่อกำหนดพฤติกรรมการใส่เครื่องหมายคำพูดหากจำเป็น

คำถามที่พบบ่อย

ถาม: workbook.save("output.csv") ให้ผลลัพธ์เหมือนกันกับ save_as_csv() หรือไม่?

ใช่ Workbook.save() ตรวจสอบนามสกุลไฟล์และมอบหมายให้ save_as_csv() เมื่อนามสกุลคือ .csv เรียก save_as_csv() โดยตรงและส่งอินสแตนซ์ CSVSaveOptions เมื่อคุณต้องการกำหนดการส่งออกให้เกินกว่าค่าเริ่มต้นในตัว

ถาม: ฉันสามารถส่งออกไปยังสตริง CSV แทนไฟล์ได้หรือไม่?

ใช่ ใช้ CSVHandler.save_csv_to_string(workbook, options) จาก aspose.cells_foss.csv_handler ซึ่งจะส่งคืนเนื้อหา CSV เป็นสตริง Python ที่คุณสามารถเขียนลงในสตรีม อัปโหลด หรือประมวลผลเพิ่มเติมได้โดยไม่ต้องสัมผัสระบบไฟล์

from aspose.cells_foss import Workbook
from aspose.cells_foss.csv_handler import CSVHandler, CSVSaveOptions

workbook = Workbook("input.xlsx")
csv_string = CSVHandler().save_csv_to_string(workbook, CSVSaveOptions())
print(csv_string)

ถาม: ฉันจะโหลด CSV กลับเข้าสู่เวิร์กบุ๊กหลังจากบันทึกได้อย่างไร?

ใช้ Workbook.load_csv("file.csv") บนอินสแตนซ์ Workbook ที่มีอยู่ หรือเรียกฟังก์ชันสะดวก load_csv_workbook("file.csv") จาก aspose.cells_foss.csv_handler เพื่อรับเวิร์กบุ๊กที่พร้อมใช้งานในขั้นตอนเดียว

ถาม: รองรับ Python เวอร์ชันใดบ้าง?

Aspose.Cells FOSS ต้องการ Python 3.7 หรือใหม่กว่า ไม่จำเป็นต้องมีส่วนขยายเนทีฟเพิ่มเติมสำหรับการส่งออก CSV ไลบรารีเป็น Python บริสุทธิ์

ถาม: ฉันสามารถบันทึกเฉพาะบางส่วนของเวิร์กชีต (ช่วงเซลล์) เป็น CSV ได้หรือไม่?

Aspose.Cells FOSS ส่งออกช่วงที่ใช้งานทั้งหมดของเวิร์กชีตที่ใช้งานอยู่ หากต้องการจำกัดเอาต์พุตให้อยู่ในช่วงที่กำหนด ให้คัดลอกเซลล์ที่ต้องการไปยังเวิร์กบุ๊กชั่วคราวและส่งออกเวิร์กบุ๊กนั้น

ดูเพิ่มเติม

 ภาษาไทย