Excel ปลายทางข้อมูลขั้นสูง

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

บทความนี้อธิบายวิธีการสร้างตารางการนําทางเหล่านี้เพื่อสร้างเอกสาร Excel โดยทางโปรแกรมจากกระแสข้อมูลของคุณ

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับความสามารถเหล่านี้ ดูที่ การจัดรูปแบบเอกสาร Excel และเพิ่มไฮเปอร์ลิงก์พร้อมตารางนําทาง และเพิ่มรูปแบบแบบมีเงื่อนไขให้กับเอกสาร Excel ที่มีตารางนําทาง

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

ก่อนที่คุณจะสามารถใช้ปลายทางขั้นสูงของ Excel คุณต้องตั้งค่ากระแสข้อมูล Gen2 ของคุณด้วยการกําหนดค่าที่ถูกต้อง:

  1. สร้างคิวรีตารางการนําทาง - ใน Dataflow Gen2 ของคุณ ให้สร้างคิวรีที่ส่งออกตารางการนําทางตามที่อธิบายไว้ในบทความนี้ แบบสอบถามควรส่งกลับตารางที่มีคอลัมน์ที่จําเป็น (PartType, , และ DataSheet, และ NameProperties)

  2. เพิ่มปลายทางข้อมูล - เลือกคิวรีตารางการนําทางของคุณและเพิ่มปลายทางข้อมูลโดยเลือก เพิ่มปลายทางข้อมูล จากเมนูบริบทของคิวรีหรือริบบิ้น

  3. เลือกปลายทางที่อิงตามไฟล์ - เลือกปลายทางที่อิงตามไฟล์ เช่น:

    • SharePoint
    • ไฟล์เลคเฮาส์
    • Azure Data Lake Storage รุ่น2
    • ที่เก็บข้อมูล Azure Blob
  4. ตั้งค่ารูปแบบไฟล์เป็น Excel - ในการกําหนดค่าปลายทาง ให้ตั้งค่า รูปแบบไฟล์ เป็น Excel

  5. เลือก รูปแบบขั้นสูง - ในดรอปดาวน์ รูปแบบ ให้เลือก ขั้นสูง ตัวเลือกนี้จะบอกให้ตัวเชื่อมต่อตีความผลลัพธ์คิวรีของคุณเป็นตารางการนําทางที่กําหนดโครงสร้างเอกสาร Excel

    สกรีนช็อตแสดงกล่องโต้ตอบปลายทางข้อมูลที่เลือกรูปแบบไฟล์ Excel และ รูปแบบขั้นสูง

เมื่อกําหนดค่าแล้ว เมื่อกระแสข้อมูลทํางาน ระบบจะอ่านตารางการนําทางของคุณและสร้างไฟล์ Excel ที่สอดคล้องกันด้วยโครงสร้างที่คุณกําหนด

ภาพรวม

เอกสาร Excel ใน Power Query จะแสดงเป็นตารางนําทาง ซึ่งเป็นตาราง M มาตรฐานที่มีคอลัมน์เฉพาะที่อธิบายโครงสร้างเอกสาร แต่ละแถวในตารางนําทางแสดงถึงส่วนหนึ่งของเอกสาร Excel เช่น แผ่นงานที่มีข้อมูลหรือแผนภูมิที่แสดงภาพข้อมูลนั้น

เมื่อคุณกําหนดค่าปลายทางเอาต์พุตของ Excel ในกระแสข้อมูล ระบบจะอ่านตารางการนําทางนี้และสร้างไฟล์ Excel ที่สอดคล้องกัน วิธีการนี้ให้ความยืดหยุ่นในการกําหนดสมุดงานที่ซับซ้อนด้วยแผ่นงาน แผนภูมิ และความสัมพันธ์ของข้อมูลหลายแผ่น

สำคัญ

ฟิลด์ระเบียน M และชื่อคอลัมน์ในตารางจะแยกแยะตัวพิมพ์ใหญ่-เล็ก ใช้ชื่อคุณสมบัติตามที่ระบุไว้อย่างแม่นยํา เช่น PartType, StartCell, และ DataSeries. ค่าที่ระบุเช่น SheetData, Column, และ Center ได้รับการยอมรับโดยไม่คํานึงถึงตัวพิมพ์เล็ก แต่ใช้ตัวพิมพ์ที่มีเอกสารสําหรับโค้ดที่อ่านง่ายและคาดการณ์ได้ ชื่อคอลัมน์ในตารางต้นทางที่ใช้โดย AxisColumns, ValueColumns, สไตล์, การจัดรูปแบบตามเงื่อนไข และไฮเปอร์ลิงก์จะแยกแยะตัวพิมพ์ใหญ่-เล็ก

ตัวอย่างที่ใช้ชื่อเช่น SalesData, YourDataTable, หรือ MainTable คาดหวังว่าค่าเหล่านั้นจะเป็นตารางที่กําหนดไว้ก่อนหน้านี้ในคําสั่งเดียวกัน หรือถูกส่งมาจากคําสั่ง Dataflow อื่น การค้นหาที่สมบูรณ์ต้องกําหนดตัวระบุอ้างอิงทุกตัว

การอ้างอิงด่วน

ส่วนนี้แสดงมุมมองแบบรวมของชนิดชิ้นส่วนและคุณสมบัติหลักสําหรับการค้นหาอย่างรวดเร็ว สําหรับเทมเพลตโค้ดที่พร้อมใช้งาน โปรดดู รูปแบบทั่วไป สําหรับการแก้ไขข้อผิดพลาด โปรดดู การแก้ไขปัญหา

ประเภทชิ้นส่วนได้อย่างรวดเร็ว

ประเภทชิ้นส่วน จุดประสงค์ ข้อมูลที่ต้องการ การวางตําแหน่ง หลายต่อแผ่น
Workbook การตั้งค่าระดับเอกสาร ไม่ (null) ไม่ระบุ ไม่ (แถวแรกเท่านั้น)
SheetData การส่งออกข้อมูลอย่างง่าย มี (ตารางแบบอินไลน์) A1 เสมอ ไม่ใช่
Table ตาราง Excel พร้อมการจัดรูปแบบ มี (ตารางแบบอินไลน์) StartCell หรืออัตโนมัติ ใช่ (หากไม่ทับซ้อนกัน)
Range ข้อมูลดิบที่ไม่มีการจัดรูปแบบตาราง มี (ตารางแบบอินไลน์) StartCell หรืออัตโนมัติ ใช่ (หากไม่ทับซ้อนกัน)
Text ค่าในเซลล์หรือพื้นที่ที่รวม ใช่ (ค่าเดียว) StartCell หรืออัตโนมัติ ใช่ (หากไม่ทับซ้อนกัน)
Chart การแสดงภาพแผนภูมิ ใช่ (แบบอินไลน์หรืออ้างอิง) Bounds ทรัพย์สิน ใช่

คุณสมบัติหลักตามชนิดชิ้นส่วน

ทรัพย์สิน Workbook แผ่นข้อมูล ตาราง ช่วง ข้อความ แผนภูมิ
StartCell - - ✓ ✓ ✓ -
ColumnSpan - - - - ✓ -
TableStyle - - ✓ - - ✓*
SkipHeader - - - ✓ - -
ShowGridlines - ✓ ✓ ✓ ✓ ✓
ChartType - - - - - ✓
ChartTitle - - - - - ✓
DataSeries - - - - - ✓
Bounds - - - - - ✓
ChartInferenceFunction ✓ - - - - -
StrictNameHandling ✓ - - - - -
UseSharedStrings ✓ - - - - -
AutoPositionColumnOffset - - ✓ ✓ ✓ ✓*
AutoPositionRowOffset - - ✓ ✓ ✓ ✓*
Styles - ✓ ✓ ✓ ✓ ✓*
ConditionalFormatting - ✓ ✓ ✓ ✓ ✓*
Hyperlinks - ✓ ✓ ✓ ✓ ✓*

* สําหรับแผนภูมิที่มีข้อมูลแบบอินไลน์ คุณสมบัติเหล่านี้จะควบคุมตารางข้อมูลสํารอง

ตัวอย่างขั้นต่ํา

วิธีที่ง่ายที่สุดในการสร้างเอกสาร Excel คือการจัดเตรียมตารางการนําทางที่มีเฉพาะข้อมูลที่คุณต้องการส่งออก PartType และ Data เป็นคอลัมน์เดียวที่จําเป็นสําหรับตารางนําทาง ตัวเชื่อมต่อสามารถอนุมานคอลัมน์ที่ถูกSheetละเว้น , Name, และProperties

ตัวอย่างต่อไปนี้กําหนด SalesData ตารางที่ใช้ตลอดทั้งบทความนี้:

let
    // Define your data with columns used throughout this article
    SalesData = #table(
        type table [
            Region = text, 
            Category = text, 
            Product = text, 
            Quarter = text,
            Revenue = number,
            Units = number
        ],
        {
            {"North", "Electronics", "Laptop", "Q1", 45000, 150},
            {"North", "Electronics", "Phone", "Q1", 32000, 400},
            {"North", "Furniture", "Desk", "Q1", 18000, 60},
            {"South", "Electronics", "Laptop", "Q1", 38000, 120},
            {"South", "Electronics", "Phone", "Q1", 28000, 350},
            {"South", "Furniture", "Chair", "Q1", 12000, 200},
            {"East", "Electronics", "Tablet", "Q2", 22000, 180},
            {"East", "Furniture", "Desk", "Q2", 15000, 50},
            {"West", "Electronics", "Phone", "Q2", 41000, 520},
            {"West", "Furniture", "Chair", "Q2", 9000, 150}
        }
    ),

    // Create the navigation table with minimal structure
    // Only Data and PartType are required
    excelDocument = #table(
        type table [PartType = nullable text, Data = any],
        {
            {"SheetData", SalesData}
        }
    )
in
    excelDocument

เมื่อคุณไม่ได้ระบุชื่อแผ่นงานหรือชื่อชิ้นส่วน ระบบจะสร้างค่าเริ่มต้นที่เหมาะสมโดยอัตโนมัติ

การอ้างอิงคิวรีอื่นๆ

ในกระแสข้อมูล คุณสามารถอ้างอิงคิวรีอื่นๆ ที่มีอยู่ในตารางการนําทางของคุณได้ คอลัมน์ยอมรับ Data ค่าตารางใดๆ รวมถึงการอ้างอิงไปยังคิวรีที่กําหนดไว้ที่อื่นในกระแสข้อมูลของคุณ:

let
    // Reference existing queries named "MonthlySales" and "CurrentInventory"
    excelDocument = #table(
        type table [PartType = nullable text, Data = any],
        {
            {"SheetData", MonthlySales},
            {"SheetData", CurrentInventory}
        }
    )
in
    excelDocument

ตารางการนําทางเป็นไปตาม Schema เฉพาะที่มีคอลัมน์ต่อไปนี้:

คอลัมน์ ประเภท จำเป็นต้องระบุ คำอธิบาย
แผ่น ข้อความที่ว่างได้ ไม่ใช่ ชื่อเวิร์กชีตหลักสําหรับชิ้นส่วน หากไม่ได้ระบุ ชื่อดีฟอลต์จะถูกสร้างขึ้น
ชื่อ ข้อความที่ว่างได้ ไม่ใช่ ตัวระบุเฉพาะสําหรับชิ้นส่วน จําเป็นเฉพาะเมื่อส่วนอื่นจําเป็นต้องอ้างอิงข้อมูลของส่วนนี้
ประเภทชิ้นส่วน SMS ใช่ ประเภทของชิ้นส่วนที่คุณกําลังสร้าง: Workbook, SheetData, Table, Range, Text, หรือ Chart. อย่าปล่อยให้คอลัมน์นี้เป็นศูนย์หรือว่างเปล่า
คุณสมบัติ ระเบียนที่เป็นโมฆะ ไม่ใช่ ตัวเลือกการกําหนดค่าเฉพาะสําหรับชนิดชิ้นส่วน
ข้อมูล ใดๆ ใช่ เนื้อหาของบทนี้ รูปร่างค่าที่ต้องการขึ้นอยู่กับ PartType; ดูตารางต่อไปนี้

เพื่อความสอดคล้อง โดยเฉพาะเมื่อคุณสร้างแถวแบบไดนามิก ให้ใช้สคีมาฉบับเต็มนี้แม้ว่าค่าบางค่าจะเป็นค่า null:

type table [
    Sheet = nullable text,
    Name = nullable text,
    PartType = text,
    Properties = nullable record,
    Data = any
]

คําสั่งเก่าหรือแบบรวมแบบไดนามิกสามารถประกาศคอลัมน์เป็น PartType = nullable text;ระบบยอมรับการประกาศประเภท M นี้ แต่ทุกแถวในตารางนําทางต้องมีค่าที่ไม่เป็นศูนย์PartType ใช้[]สําหรับระเบียนที่รวมมาแต่ว่างเปล่าProperties คุณค่าทางกฎหมาย Data มีดังนี้:

PartType มูลค่าทางกฎหมายData
Workbook null แถวนี้จะกําหนดค่าเอกสาร และเมื่อมีอยู่ ต้องเป็นแถวแรก
SheetData, Table, Range ตารางอินไลน์ที่มีคอลัมน์สคีมาอย่างน้อยหนึ่งคอลัมน์ ตารางสามารถมีแถวข้อมูลได้เป็นศูนย์
Text ค่าสเกลาร์หนึ่งค่า เช่น ข้อความ ตัวเลข ตรรกะ วันที่/เวลา ระยะเวลา หรือ null มันไม่ใช่โต๊ะ
Chart ตารางแบบอินไลน์ หรือตารางว่างที่มีคอลัมน์ศูนย์ซึ่งมีข้อมูลอ้างอิง: #table({}, {}) meta [Name = "SourcePartName"]

Tip

แถวเป็น Workbook ตัวเลือก เพิ่มเฉพาะสําหรับการตั้งค่าระดับเอกสาร เช่น ChartInferenceFunction, StrictNameHandling, หรือ UseSharedStrings. เมื่อมี schema แบบเต็ม ให้ใช้ {null, null, "Workbook", [...], null} because Sheet และ Name จะไม่มีความหมายสําหรับแถวระดับเอกสารนี้

ชนิดชิ้นส่วนที่รองรับ

  • เวิร์กบุ๊ก: การกําหนดค่าระดับเอกสาร ต้องเป็นแถวแรกหากใช้ ไม่มีข้อมูล
  • SheetData: แผ่นงานที่มีข้อมูลแบบตาราง ส่วนนี้ถูกผูกไว้กับข้อมูล ส่วน SheetData ต้องมีข้อมูลแบบอินไลน์และไม่สามารถใช้การอ้างอิงตารางได้ สร้างช่วงข้อมูลเดียวโดยเริ่มจากเซลล์ A1
  • ตาราง: ตาราง Excel (จัดรูปแบบด้วยการจัดรูปแบบตาราง) ส่วนนี้ถูกผูกไว้กับข้อมูล รองรับการวางตําแหน่งที่ชัดเจนผ่าน StartCell และการวางตําแหน่งอัตโนมัติ ส่วนของตารางหลายส่วนสามารถมีอยู่ในแผ่นงานเดียวกันได้หากไม่ทับซ้อนกัน
  • ช่วง: ช่วงข้อมูลที่ไม่มีการจัดรูปแบบตาราง Excel ส่วนนี้ถูกผูกไว้กับข้อมูล รองรับการวางตําแหน่งที่ชัดเจนผ่าน StartCell และการวางตําแหน่งอัตโนมัติ ส่วนช่วงหลายส่วนสามารถมีอยู่ในแผ่นงานเดียวกันได้หากไม่ทับซ้อนกัน
  • ข้อความ: ค่าเดียวที่วางไว้ในเซลล์หรือพื้นที่ที่รวมกัน รองรับการวางตําแหน่งที่ชัดเจนผ่าน StartCell และการวางตําแหน่งอัตโนมัติ ข้อความไม่ได้ถูกผูกกับข้อมูลและไม่สามารถอ้างอิงด้วยแผนภูมิได้
  • แผนภูมิ: การแสดงภาพแผนภูมิ สามารถวางบนแผ่นงานของตัวเองหรือรวมกับข้อมูล ส่วนนี้ถูก ผูกมัดด้วยข้อมูล เมื่อมีข้อมูลแบบอินไลน์ หรือสามารถอ้างอิงข้อมูลจากส่วนอื่นได้

Note

ส่วนที่ผูกกับข้อมูล คือส่วนที่มีหรืออ้างอิงข้อมูลแบบตาราง SheetData, , Table, Rangeและ Chart (ที่มีข้อมูลแบบอินไลน์) เป็นส่วนที่ผูกไว้กับข้อมูล แต่ละชิ้นส่วนที่ผูกกับข้อมูลแบบอินไลน์จะลงทะเบียนแหล่งข้อมูลของตนโดยใช้แหล่งข้อมูลที่จัดเตรียมหรือสร้างขึ้น Nameดังนั้นชื่อเหล่านั้นต้องไม่ซ้ํากัน ให้แหล่งข้อมูลระบุอย่างชัดเจน Name เมื่อแผนภูมิอ้างอิงถึงแหล่งนั้น

สำคัญ

คุณไม่สามารถผสม SheetData กับ Table, Range, หรือ Text ชิ้นส่วนบนแผ่นเดียวกันได้ ใช้ชิ้น SheetData งานเดี่ยวหรือวางพร้อมกัน เมื่อคุณต้องการหลายภูมิภาคในแผ่นเดียวกัน ให้ใช้ Table, Range, หรือ Text ชิ้นส่วนที่มีการจัดตําแหน่ง

การเลือกประเภทชิ้นส่วนที่เหมาะสม

ใช้คู่มือการตัดสินใจนี้เพื่อเลือกชนิดชิ้นส่วนที่เหมาะสมสําหรับสถานการณ์ของคุณ:

ใช้ SheetData เมื่อ:

  • คุณต้องมีขอบเขตข้อมูลเดียวที่เรียบง่ายต่อแผ่นงาน
  • ข้อมูลควรเริ่มต้นที่เซลล์ A1
  • คุณไม่จําเป็นต้องมีคุณลักษณะของตาราง Excel (ตัวกรอง การอ้างอิงที่มีโครงสร้าง)
  • คุณกําลังส่งออกข้อมูลแบบตารางที่ตรงไปตรงมา

ใช้ Table เมื่อ:

  • คุณต้องการการจัดรูปแบบตาราง Excel พร้อมดรอปดาวน์ตัวกรอง
  • คุณต้องการการอ้างอิงที่มีโครงสร้างสําหรับสูตร
  • คุณกําลังวางขอบเขตข้อมูลหลายเขตบนแผ่นงานเดียว
  • คุณต้องการควบคุมตําแหน่งที่แม่นยําด้วย StartCell
  • คุณต้องการใช้ลักษณะตาราง (TableStyleMedium1ฯลฯ)

ใช้ Range เมื่อ:

  • คุณต้องการข้อมูลดิบโดยไม่ต้องจัดรูปแบบตาราง Excel
  • คุณต้องการละเว้นส่วนหัว (SkipHeader = true)
  • คุณกําลังวางขอบเขตข้อมูลหลายเขตบนแผ่นงานเดียว
  • ข้อมูลจะถูกใช้โดยระบบอื่นที่คาดว่าจะมีช่วงธรรมดา

ใช้ Text เมื่อ:

  • คุณต้องการเพิ่มชื่อเรื่อง ป้ายกํากับ หมายเหตุ หรือค่าเดียวอื่น ๆ
  • คุณต้องการให้ค่านั้นอยู่ในภูมิภาคที่รวมแล้ว
  • คุณต้องการวางข้อความไว้ข้างหรือเหนือส่วนตารางและช่วง

ใช้ Chart เมื่อ:

  • คุณต้องการการแสดงข้อมูลเป็นภาพ
  • เมื่อใช้ข้อมูลแบบอินไลน์: แผนภูมิและข้อมูลจะปรากฏพร้อมกันในแผ่นงานเดียวกัน
  • ด้วยการอ้างอิง: แผนภูมิและข้อมูลสามารถอยู่ในแผ่นงานแยกกัน และหลายแผนภูมิสามารถแชร์แหล่งข้อมูลเดียวได้

ตัวอย่างที่มีโครงสร้างเต็มรูปแบบ

let
    // Helper function to create a reference to another part
    buildReference = (name as text) => #table({}, {}) meta [Name = name],

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {null, null, "Workbook", [ChartInferenceFunction = Office.InferChartPropertiesGenerator()], null},
            {"DataSheet", "SalesTable", "SheetData", [], SalesData},
            {"ChartSheet", "SalesChart", "Chart", [ChartType = "Column"], buildReference("SalesTable")}
        }
    )
in
    excelDocument

แผนภูมิและการจัดวางข้อมูล

เมื่อคุณสร้างส่วนของแผนภูมิ คุณสามารถควบคุมตําแหน่งที่แผนภูมิและข้อมูลของแผนภูมิจะปรากฏในเวิร์กบุ๊กได้

แผนภูมิที่มีแผ่นข้อมูลแยกต่างหาก

เมื่อแผนภูมิอ้างอิงข้อมูลจากส่วนอื่นโดยใช้ meta [Name = "..."] ไวยากรณ์ ข้อมูลและแผนภูมิจะถูกวางไว้ในแผ่นงานที่แยกจากกัน

สำคัญ

เมื่อใช้การอ้างอิง คอลัมน์เป็น Name ข้อบังคับ การอ้างอิงได้รับการแก้ไขโดยการจับคู่ค่ากับmeta [Name = "..."]Nameคอลัมน์ของแถวอื่นในตารางการนําทาง

การอ้างอิงคือตารางเปล่าที่มีคอลัมน์ศูนย์ที่มีเมตาดาต้า ไม่ใช่ข้อความและไม่ใช่ตารางต้นทางเอง: #table({}, {}) meta [Name = "SalesTable"] การจับคู่ชื่อเมตาดาต้าจะแยกตามตัวพิมพ์เล็ก-ใหญ่ เฉพาะ Chart ชิ้นส่วนเท่านั้นที่ใช้แบบฟอร์มอ้างอิงนี้ได้

let
    // Helper function to create a reference to another part
    buildReference = (name as text) => #table({}, {}) meta [Name = name],

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {null, null, "Workbook", [ChartInferenceFunction = Office.InferChartPropertiesGenerator()], null},
            // Data on its own sheet
            {"DataSheet", "SalesTable", "SheetData", [], SalesData},
            // Chart on a different sheet, referencing the data
            {"ChartSheet", "SalesChart", "Chart", [ChartType = "Line"], buildReference("SalesTable")}
        }
    )
in
    excelDocument

แผนภูมิที่มีข้อมูลแบบอินไลน์

เมื่อส่วนของแผนภูมิมีข้อมูลโดยตรง (โดยไม่อ้างอิงส่วนอื่น) ทั้งข้อมูลและแผนภูมิจะถูกสร้างขึ้นในแผ่นงานเดียวกัน:

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {null, null, "Workbook", [ChartInferenceFunction = Office.InferChartPropertiesGenerator()], null},
            // Data and chart appear together on the same sheet
            {"SalesSheet", "SalesChart", "Chart", [ChartType = "Column"], SalesData}
        }
    )
in
    excelDocument

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

แผนภูมิหลายแผนภูมิที่มีข้อมูลแบบอินไลน์บนแผ่นงานเดียวกัน

เมื่อส่วนแผนภูมิหลายส่วนมีข้อมูลแบบอินไลน์ (ไม่ใช่การอ้างอิง) แต่ละแผนภูมิจะสร้างตารางข้อมูลสํารองของตัวเองบนแผ่นงานเดียวกัน ระบบจะจัดตําแหน่งโต๊ะสํารองเหล่านี้โดยอัตโนมัติเพื่อหลีกเลี่ยงการทับซ้อนกันโดยใช้การวางตําแหน่งอัตโนมัติ คุณสามารถควบคุมลักษณะที่ปรากฏของตารางสํารองได้โดยการระบุ TableStyle, AutoPositionColumnOffset, และ AutoPositionRowOffset ในส่วนของแผนภูมิ

let
    ProductData = #table(
        type table [Product = text, Sales = number],
        {{"Widget", 100}, {"Gadget", 200}, {"Gizmo", 150}}
    ),

    RegionData = #table(
        type table [Region = text, Revenue = number],
        {{"North", 5000}, {"South", 3000}, {"East", 4000}}
    ),

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // First chart with inline data - backing table auto-positioned
            {"Dashboard", "ProductChart", "Chart",
                [
                    Bounds = "B2:H15",
                    ChartType = "Column",
                    ChartTitle = "Product Sales",
                    DataSeries = [AxisColumns = {"Product"}, ValueColumns = {"Sales"}]
                ],
                ProductData
            },
            // Second chart with inline data - backing table auto-positioned after first
            {"Dashboard", "RegionChart", "Chart",
                [
                    Bounds = "J2:P15",
                    ChartType = "Pie",
                    ChartTitle = "Revenue by Region",
                    TableStyle = "TableStyleLight1",  // Style for the backing table
                    AutoPositionRowOffset = 2,        // Add extra row gap from previous table
                    DataSeries = [AxisColumns = {"Region"}, ValueColumns = {"Revenue"}]
                ],
                RegionData
            }
        }
    )
in
    excelDocument

ชิ้นส่วนตารางและช่วง

TableและRangeชิ้นส่วนให้การควบคุมการจัดวางข้อมูลได้มากกว่าSheetData ใช้เมื่อคุณต้องการขอบเขตข้อมูลหลายเขตบนแผ่นงานเดียวกันหรือต้องการการวางตําแหน่งที่เฉพาะเจาะจง

ส่วนโต๊ะ

ส่วนนี้ Table สร้างตาราง Excel พร้อมการจัดรูปแบบ ดรอปดาวน์ตัวกรอง และการอ้างอิงที่มีโครงสร้าง ใช้เมื่อคุณต้องการคุณลักษณะตาราง Excel

ทรัพย์สิน ประเภท ค่าเริ่มต้น คำอธิบาย
สตาร์ทเซลล์ SMS "auto" เซลล์ด้านซ้ายบนของตาราง (เช่น "B3") ·ใช้ "auto" สําหรับการวางตําแหน่งอัตโนมัติ
สไตล์ตาราง SMS "TableStyleMedium2" สไตล์ตาราง Excel ค่าที่ถูกต้อง: TableStyleLight1-21, , . TableStyleMedium1-28TableStyleDark1-11
AutoPositionColumnOffset เลข 1 ออฟเซ็ตคอลัมน์จาก A เมื่อวางตําแหน่งอัตโนมัติ (1 = คอลัมน์ B)
ตําแหน่งอัตโนมัติแถวออฟเซ็ต เลข 1 ช่องว่างแถวจากเนื้อหาก่อนหน้าเมื่อวางตําแหน่งอัตโนมัติ
let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // Table with explicit position and custom style
            {"Sales", "SalesTable", "Table",
                [StartCell = "B3", TableStyle = "TableStyleMedium9"],
                SalesData
            }
        }
    )
in
    excelDocument

ส่วนช่วง

ส่วนนี้ Range สร้างช่วงข้อมูลโดยไม่มีการจัดรูปแบบตาราง Excel ใช้เมื่อคุณต้องการข้อมูลดิบที่ไม่มีคุณสมบัติของตาราง

ทรัพย์สิน ประเภท ค่าเริ่มต้น คำอธิบาย
สตาร์ทเซลล์ SMS "auto" เซลล์ด้านซ้ายบนสําหรับช่วง (เช่น "C5") ·ใช้ "auto" สําหรับการวางตําแหน่งอัตโนมัติ
ข้ามส่วนหัว มีเหตุผล false เมื่อ trueละเว้นแถวส่วนหัว
AutoPositionColumnOffset เลข 1 ออฟเซ็ตคอลัมน์จาก A เมื่อวางตําแหน่งอัตโนมัติ
ตําแหน่งอัตโนมัติแถวออฟเซ็ต เลข 1 ช่องว่างแถวจากเนื้อหาก่อนหน้าเมื่อวางตําแหน่งอัตโนมัติ

Note

เมื่อ SkipHeader เป็น trueช่วงจะไม่สามารถใช้เป็นการอ้างอิงแหล่งข้อมูลสําหรับแผนภูมิได้ แผนภูมิต้องใช้แถวส่วนหัวเพื่อระบุชื่อชุดข้อมูล

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // Range at a specific position
            {"Data", "DataRange", "Range",
                [StartCell = "D5"],
                SalesData
            }
        }
    )
in
    excelDocument

ส่วนข้อความ

ชิ้นส่วนจะ Text ใส่ค่าหนึ่งค่าในเวิร์กชีต ใช้เซลล์ StartCell เดียวสําหรับเซลล์ปกติ หรือใช้ช่วงที่มีขอบเขตจํากัด เช่น "A1:B1" เพื่อรวมพื้นที่นั้นและวางค่าไว้ในเซลล์บนซ้าย

ทรัพย์สิน ประเภท ค่าเริ่มต้น คำอธิบาย
สตาร์ทเซลล์ SMS "auto" เซลล์เดียวหรือช่วงที่มีขอบเขตจํากัด ช่วงหนึ่งจะสร้างพื้นที่ที่ถูกรวม
ColumnSpan เลข 1 จํานวนคอลัมน์ที่จะรวมเมื่อใช้การกําหนดตําแหน่งอัตโนมัติ
AutoPositionColumnOffset เลข 1 เลื่อนคอลัมน์เมื่อใช้การจัดตําแหน่งอัตโนมัติ
ตําแหน่งอัตโนมัติแถวออฟเซ็ต เลข 1 เลื่อนแถวเมื่อใช้การจัดตําแหน่งอัตโนมัติ
ShowGridlines มีเหตุผล true ควบคุมเส้นกริดสําหรับเวิร์กชีตทั้งหมด

ใช้อย่างใดอย่างหนึ่ง StartCell ไม่ใช่ ColumnSpanทั้งสองอย่าง ColumnSpan สร้างพื้นที่รวมแนวนอนและใช้ได้เฉพาะกับการวางตําแหน่งอัตโนมัติเท่านั้น เพื่อสร้างพื้นที่รวมหลายแถว ให้ระบุช่วงที่มีขอบเขตสมบูรณ์ใน StartCellเช่น "A1:B2".

ข้อความสามารถแชร์แผ่นงานกับส่วนตาราง ช่วง และแผนภูมิเมื่อเซลล์ที่ครอบครองไม่ทับซ้อนกัน มันไม่สามารถแชร์ชีตกับ SheetData, และไม่สามารถใช้เป็นแหล่งข้อมูลกราฟได้

ตัวอย่างต่อไปนี้วางชื่อที่รวมไว้เหนือตาราง ทั้งสองส่วนใช้ตําแหน่งที่ชัดเจน ดังนั้นเซลล์ที่ถูกครอบครองจึงคาดเดาได้และไม่ทับซ้อนกัน

let
    SalesData = #table(
        type table [Region = text, Revenue = number],
        {{"North", 95000}, {"South", 78000}}
    ),

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {"Report", "ReportTitle", "Text", [StartCell = "A1:B1", ShowGridlines = false], "Regional Sales Report"},
            {"Report", "SalesTable", "Table", [StartCell = "A3"], SalesData}
        }
    )
in
    excelDocument

หลายตารางบนแผ่นงานเดียวกัน

คุณสามารถวางหลาย Tableส่วน , Range, หรือ Text หลายส่วนบนแผ่นเดียวกันได้ ตราบใดที่ไม่ทับซ้อนกัน

let
    SummaryData = #table(type table [Metric = text, Value = number], {{"Total", 50000}, {"Average", 5000}}),

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // Two tables side by side
            {"Report", "DetailTable", "Table",
                [StartCell = "A1", TableStyle = "TableStyleMedium9"],
                SalesData
            },
            {"Report", "SummaryTable", "Table",
                [StartCell = "I1", TableStyle = "TableStyleLight15"],
                SummaryData
            }
        }
    )
in
    excelDocument

การวางตําแหน่งอัตโนมัติ

เมื่อคุณไม่ได้ระบุ StartCell (หรือตั้งค่าเป็น "auto") ระบบจะจัดตําแหน่งชิ้นส่วนในแนวตั้งโดยอัตโนมัติ โดยแต่ละส่วนอยู่ด้านล่างอีกส่วนหนึ่ง ตามลําดับที่ปรากฏในตารางการนําทาง สิ่งนี้มีประโยชน์เมื่อคุณมีขอบเขตข้อมูลหลายแห่งและไม่ต้องการการควบคุมที่แม่นยํา

ทรัพย์สิน ค่าเริ่มต้น คำอธิบาย
AutoPositionColumnOffset 1 ออฟเซ็ตคอลัมน์เริ่มต้นจาก A ค่าของ 0 เริ่มต้นที่คอลัมน์ A 1 ที่คอลัมน์ B
ตําแหน่งอัตโนมัติแถวออฟเซ็ต 1 จํานวนแถวว่างระหว่างส่วนต่างๆ ค่า 0 ของชิ้นส่วนที่อยู่ติดกันทันที
let
    DataA = #table(type table [X = number], {{1}, {2}, {3}}),
    DataB = #table(type table [Y = number], {{10}, {20}}),
    DataC = #table(type table [Z = number], {{100}}),

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // First table: starts at B2 (column offset 1, row offset 1)
            {"AutoSheet", "Table1", "Table", [], DataA},
            // Second table: starts at B + (3 data rows + 1 header + 1 gap) = B7
            {"AutoSheet", "Table2", "Table", [], DataB},
            // Third table: continues below Table2
            {"AutoSheet", "Table3", "Table", [], DataC}
        }
    )
in
    excelDocument

ในการเปลี่ยนลักษณะการทํางานของตําแหน่ง:

let
    DataA = #table(type table [X = number], {{1}, {2}, {3}}),
    DataB = #table(type table [Y = number], {{10}, {20}}),

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // Start at column C (offset 2), row 4 (offset 3)
            {"CustomOffset", "Table1", "Table",
                [AutoPositionColumnOffset = 2, AutoPositionRowOffset = 3],
                DataA
            },
            // Start at column A (offset 0), with 2 row gap
            {"CustomOffset", "Table2", "Table",
                [AutoPositionColumnOffset = 0, AutoPositionRowOffset = 2],
                DataB
            }
        }
    )
in
    excelDocument

สำคัญ

คุณไม่สามารถผสมการวางตําแหน่งอัตโนมัติกับค่าที่ชัดเจน StartCell ในแผ่นงานเดียวกันได้ ทุกส่วนบนแผ่นงานต้องใช้การวางตําแหน่งอัตโนมัติ (ไม่มี StartCell หรือ StartCell = "auto") หรือการอ้างอิงเซลล์ที่ชัดเจน

ทับซ้อนกัน

ระบบจะตรวจจับและรายงานช่วงที่ทับซ้อนกัน หากสองส่วนจะเขียนลงในเซลล์เดียวกัน จะมีการโยนข้อผิดพลาด

เพื่อหลีกเลี่ยงการทับซ้อนกัน:

  • ใช้การวางตําแหน่งอัตโนมัติและปล่อยให้ระบบจัดเรียงชิ้นส่วนในแนวตั้ง
  • เมื่อใช้ค่าที่ชัดเจน StartCell ให้ตรวจสอบให้แน่ใจว่าส่วนต่างๆ ไม่ได้ใช้เซลล์ร่วมกัน
  • พิจารณาแถวส่วนหัวเมื่อคํานวณตําแหน่ง (ตารางจะมีแถวส่วนหัวเสมอ แต่ในช่วงจะเป็นทางเลือก)

ความกว้างของคอลัมน์

ความกว้างของคอลัมน์จะถูกคํานวณโดยอัตโนมัติตามเนื้อหาและชนิดข้อมูล เมื่อหลายช่วงใช้คอลัมน์เดียวกัน ช่วงบนสุด (ตามแถวเริ่มต้น) จะกําหนดความกว้างของคอลัมน์สําหรับคอลัมน์ที่ใช้ร่วมกันเหล่านั้น

คุณสมบัติ ShowGridlines

คุณสมบัติจะ ShowGridlines ควบคุมว่าเส้นตารางของ Excel จะมองเห็นได้สําหรับแผ่นงานหรือไม่ ตั้งค่าคุณสมบัตินี้บน SheetData, Table, Range, Text, หรือ Chart ส่วนต่าง ๆ มันส่งผลกระทบกับทั้งแผ่น เมื่อ true (ค่าเริ่มต้น) เส้นตารางจะมองเห็นได้ เมื่อ falseเส้นตารางถูกซ่อนไว้

ถ้าส่วนใดส่วนหนึ่งบนแผ่นงานตั้งค่าเป็น ShowGridlinesทั้งแผ่นงานจะซ่อนเส้นตารางไว้อย่างชัดเจนfalse

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // Hide gridlines for this sheet
            {"CleanReport", "DataTable", "Table",
                [ShowGridlines = false, StartCell = "B2"],
                SalesData
            }
        }
    )
in
    excelDocument

คุณสมบัติของสมุดงาน

ชนิดชิ้นส่วน Workbook ช่วยให้คุณสามารถกําหนดการตั้งค่าระดับเอกสารได้ ถ้าใช้ จะต้องเป็นแถวแรกในตารางการนําทาง

ทรัพย์สิน ประเภท คำอธิบาย
ChartInference ฟังก์ชัน ฟังก์ชัน ฟังก์ชันที่กําหนดคุณสมบัติของแผนภูมิโดยอัตโนมัติเมื่อไม่ได้ระบุไว้อย่างชัดเจน ใช้สําหรับ Office.InferChartPropertiesGenerator() เอ็นจิ้นการอนุมานในตัว
การจัดการชื่อที่เข้มงวด มีเหตุผล เมื่อ trueแสดงข้อผิดพลาดหากชื่อแผ่นงานหรือชื่อชิ้นส่วนมีอักขระที่ไม่ถูกต้อง เมื่อ false (ค่าเริ่มต้น) ชื่อจะถูกฆ่าเชื้อโดยอัตโนมัติ
ใช้ SharedStrings มีเหตุผล เมื่อ true (ค่าเริ่มต้น) ใช้ตารางสตริงที่ใช้ร่วมกันของ Excel สําหรับเซลล์ข้อความ ส่งผลให้ไฟล์มีขนาดเล็กลง

ตัวอย่างที่มีคุณสมบัติของเวิร์กบุ๊ก

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // Workbook configuration (must be first)
            {null, null, "Workbook",
                [
                    ChartInferenceFunction = Office.InferChartPropertiesGenerator([
                        Allow3DCharts = false,
                        PreferMultilevelChartInference = true
                    ]),
                    StrictNameHandling = false
                ], 
                null
            },
            // Data and charts follow
            {"Sales", "SalesTable", "SheetData", [], SalesData}
        }
    )
in
    excelDocument

แผนภูมิหลายแผนภูมิที่มีข้อมูลที่ใช้ร่วมกัน

แผนภูมิสามารถอ้างอิงแหล่งข้อมูลเดียวกัน ซึ่งช่วยให้คุณสามารถสร้างการแสดงภาพหลายรายการของชุดข้อมูลเดียวกันได้โดยไม่ต้องทําซ้ําข้อมูลในเวิร์กบุ๊ก

ใช้ไว meta [Name = "..."] ยากรณ์เพื่อสร้างการอ้างอิง Nameต้องระบุคอลัมน์สําหรับส่วนข้อมูลเพื่อให้แผนภูมิสามารถแก้ไขการอ้างอิงได้

สำคัญ

เมื่อแผนภูมิอ้างอิงข้อมูล คุณต้องระบุการตั้งค่าคอนฟิกDataSeriesด้วย AxisColumns และValueColumns หากไม่มี ChartInferenceFunction การกําหนดค่าในคุณสมบัติ เวิร์กบุ๊ก การละเว้นพารามิเตอร์ที่จําเป็นเหล่านี้จะส่งผลให้เกิดข้อผิดพลาด

let
    // Helper function to create a reference
    buildReference = (name as text) => #table({}, {}) meta [Name = name],

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            // Single data source - Name is required for reference resolution
            {"Data", "SalesTable", "SheetData", [], SalesData},
            
            // Multiple charts referencing the same data
            // Each chart must specify DataSeries with AxisColumns and ValueColumns
            {"LineChart", "TrendChart", "Chart", 
                [
                    ChartType = "Line", 
                    ChartTitle = "Sales Trend",
                    DataSeries = [AxisColumns = {"Quarter"}, ValueColumns = {"Revenue"}]
                ],
                buildReference("SalesTable")
            },
            {"PieChart", "DistributionChart", "Chart",
                [
                    ChartType = "Pie", 
                    ChartTitle = "Sales Distribution",
                    DataSeries = [AxisColumns = {"Region"}, ValueColumns = {"Revenue"}]
                ],
                buildReference("SalesTable")
            },
            {"BarChart", "ComparisonChart", "Chart",
                [
                    ChartType = "Bar", 
                    ChartTitle = "Product Comparison",
                    DataSeries = [AxisColumns = {"Product"}, ValueColumns = {"Revenue", "Units"}]
                ],
                buildReference("SalesTable")
            }
        }
    )
in
    excelDocument

การอ้างอิงทํางานทั้งในทิศทางไปข้างหน้าและถอยหลัง แผนภูมิสามารถอ้างอิงข้อมูลที่กําหนดไว้ในตารางในภายหลัง และแผนภูมิหลายแผนภูมิสามารถอ้างอิงแหล่งข้อมูลเดียวกันได้

แง่มุมของชนิดและการจัดรูปแบบเซลล์

ชนิดข้อมูล Power Query และแง่มุมมีอิทธิพลโดยตรงต่อวิธีการจัดรูปแบบเซลล์ในไฟล์ Excel ที่สร้างขึ้น ระบบชนิดมีความสามารถในการจัดรูปแบบที่หลากหลายซึ่งแปลเป็นรูปแบบตัวเลข Excel ที่เหมาะสม

การแม็ปชนิดพื้นฐาน

ชนิด Power Query รูปแบบ Excel
Text.Type ข้อความ (@)
Int32.Type, Int64.Type ทั่วไป
Decimal.Type, Number.Type ตัวเลขที่มีทศนิยมสองตําแหน่ง
Currency.Type ตัวเลขที่มีตัวคั่นหลักพันและทศนิยมสองตําแหน่ง
Percentage.Type เปอร์เซ็นต์ที่มีทศนิยมสองตําแหน่ง
Date.Type รูปแบบของวันที่
Time.Type รูปแบบเวลาด้วย AM/PM
DateTime.Type รูปแบบวันที่และเวลา
DateTimeZone.Type รูปแบบวันที่และเวลา
Duration.Type รูปแบบระยะเวลา (d.hh:mm:ss)
Logical.Type ทั่วไป (จริง/เท็จ)

การใช้แง่มุมของตัวอักษรเพื่อการจัดรูปแบบที่แม่นยํา

แง่มุมของประเภทช่วยให้คุณสามารถระบุความแม่นยําและมาตราส่วนสําหรับค่าตัวเลข:

let
    // Define types with specific facets
    currencyType = Type.ReplaceFacets(Currency.Type, 
        [NumericPrecisionBase = 10, NumericPrecision = 19, NumericScale = 4]),
    
    percentageType = Type.ReplaceFacets(Percentage.Type, 
        [NumericPrecisionBase = 10, NumericPrecision = 5, NumericScale = 2]),
    
    decimalType = Type.ReplaceFacets(Decimal.Type, 
        [NumericPrecisionBase = 10, NumericPrecision = 10, NumericScale = 4]),

    // Create table with typed columns
    tableType = type table [
        Product = Text.Type,
        Price = currencyType,           // Displays as currency with 4 decimal places
        Discount = percentageType,       // Displays as percentage with 2 decimal places
        TaxRate = decimalType           // Displays as number with 4 decimal places
    ],

    pricingData = #table(tableType, {
        {"Widget", 29.9999, 0.15, 0.0825},
        {"Gadget", 49.9500, 0.20, 0.0825}
    }),

    // Create navigation table with the typed data
    excelDocument = #table(
        type table [PartType = nullable text, Data = any],
        {
            {"SheetData", pricingData}
        }
    )
in
    excelDocument

ความแม่นยําของวันที่และเวลา

คุณสามารถควบคุมความแม่นยําของส่วนประกอบเวลาได้โดยใช้ DateTimePrecision แง่มุม:

let
    // Time with millisecond precision
    timeWithMs = Type.ReplaceFacets(Time.Type, [DateTimePrecision = 3]),
    
    // DateTime with microsecond precision (Excel maximum is 3 digits)
    dateTimeWithPrecision = Type.ReplaceFacets(DateTime.Type, [DateTimePrecision = 7]),

    tableType = type table [
        EventName = Text.Type,
        EventTime = timeWithMs,
        Timestamp = dateTimeWithPrecision
    ],

    eventsData = #table(tableType, {
        {"Start", #time(9, 30, 15.123), #datetime(2025, 1, 15, 9, 30, 15.1234567)},
        {"End", #time(17, 45, 30.456), #datetime(2025, 1, 15, 17, 45, 30.9876543)}
    }),

    // Create navigation table with the typed data
    excelDocument = #table(
        type table [PartType = nullable text, Data = any],
        {
            {"SheetData", eventsData}
        }
    )
in
    excelDocument

Note

Excel รองรับความแม่นยําเศษเสี้ยววินาทีสูงสุดสามหลัก ค่าความแม่นยําที่สูงขึ้นจะถูกตัดทอน

การกําหนดค่าแผนภูมิ

แผนภูมิถูกกําหนดค่าผ่านเรกคอร์ดProperties คุณสามารถระบุการตั้งค่าแผนภูมิอย่างชัดเจนหรือพึ่งพากลไกการอนุมานเพื่อกําหนดค่าที่เหมาะสม

คุณสมบัติของแผนภูมิ

ทรัพย์สิน ประเภท คำอธิบาย
ChartType SMS ชนิดของแผนภูมิที่จะสร้าง
ชาร์ตชื่อเรื่อง SMS ชื่อที่แสดงบนแผนภูมิ
ชุดข้อมูล ระเบียน การกําหนดค่าสําหรับชุดข้อมูล แกน และค่า
ขอบเขต บันทึกหรือข้อความ ตําแหน่งและขนาดของแผนภูมิ ดู การวางตําแหน่งแผนภูมิ

การวางตําแหน่งแผนภูมิ

Boundsคุณสมบัติจะควบคุมตําแหน่งที่แผนภูมิถูกวางและขนาดของแผนภูมิ คุณสามารถระบุขอบเขตเป็นค่าข้อความโดยใช้ไวยากรณ์ช่วง Excel หรือเป็นเรกคอร์ดที่มีตัวเลือกการวางตําแหน่งโดยละเอียด

การวางตําแหน่งเริ่มต้น

เมื่อ Bounds ไม่ได้ระบุ แผนภูมิจะถูกวางตําแหน่งที่ตําแหน่งเริ่มต้นโดยเริ่มจากเซลล์ H8 โดยมีขนาดเริ่มต้นกว้าง 8 คอลัมน์และสูง 16 แถว แผนภูมิหลายแผนภูมิในแผ่นงานเดียวกันโดยไม่มีการ Bounds ชัดแจ้งจะทับซ้อนกันที่ตําแหน่งเริ่มต้นนี้

รูปแบบข้อความ (ไวยากรณ์ช่วง Excel)

ใช้การอ้างอิงเซลล์เดียวสําหรับมุมซ้ายบน (ขนาดเริ่มต้น 8 คอลัมน์ x 16 แถว) หรือช่วงสําหรับขนาดที่ชัดเจน:

การอ้างอิงเหล่านี้ระบุจุดยึดแผนภูมิ ไม่ใช่ชุดเซลล์เวิร์กชีตที่ต้องจัดรูปแบบ ในช่วงที่มี "G6:N21"คือ G6 สมอบนซ้าย และ N21 เป็นสมอล่างขวา

// Single cell: chart starts at B2 with default size
[Bounds = "B2"]

// Range: chart fills the area from G6 to N21
[Bounds = "G6:N21"]

รูปแบบการบันทึกด้วยความกว้างและความสูง

ระบุมุมซ้ายบนและขนาด:

ใช้โหมดนี้เมื่อคุณทราบขนาดกราฟ อย่ารวมToColumnหรือToRowอยู่ในบันทึกเดียวกันBounds

ทรัพย์สิน ประเภท คำอธิบาย
จากคอลัมน์ ตัวเลขหรือข้อความ ดัชนีคอลัมน์ (ตาม 0) หรือชื่อคอลัมน์ Excel (เช่น "A", ) "G" ค่าเริ่มต้น: 7 (คอลัมน์ H)
จากแถว เลข ดัชนีแถว (ตาม 0) ค่าเริ่มต้น: 7 (แถวที่ 8)
ความกว้าง เลข ความกว้างของแผนภูมิเป็นจํานวนคอลัมน์ ค่าเริ่มต้น: 8
ความสูง เลข ความสูงของแผนภูมิเป็นจํานวนแถว ค่าเริ่มต้น: 16
[Bounds = [
    FromColumn = "B",   // or 1 for column B
    FromRow = 1,        // Row 2 (0-based)
    Width = 8,          // 8 columns wide
    Height = 16         // 16 rows tall
]]

รูปแบบการบันทึกที่มีมุมที่ชัดเจน

หรือระบุมุมทั้งสองของพื้นที่แผนภูมิ:

ใช้โหมดนี้เมื่อคุณทราบตําแหน่งสมอทั้งสองตําแหน่ง อย่ารวมWidthหรือHeightอยู่ในบันทึกเดียวกันBounds FromColumn, FromRow, , และ ToRow เป็นพิกัดจุดยึดที่มีฐานเป็นศูนย์; To พิกัดต้องมากกว่าพิกัดที่สอดคล้องกันFromToColumn

ทรัพย์สิน ประเภท คำอธิบาย
จากคอลัมน์ ตัวเลขหรือข้อความ คอลัมน์เริ่มต้น (ดัชนีตาม 0 หรือชื่อ Excel) ค่าเริ่มต้น: 7 (คอลัมน์ H)
จากแถว เลข แถวเริ่มต้น (ตาม 0) ค่าเริ่มต้น: 7 (แถวที่ 8)
ถึงคอลัมน์ ตัวเลขหรือข้อความ คอลัมน์สิ้นสุด (ดัชนีตาม 0 หรือชื่อ Excel)
ทูโรว์ เลข แถวสิ้นสุด (ตาม 0)
[Bounds = [
    FromColumn = "A",
    FromRow = 0,
    ToColumn = "H",
    ToRow = 16
]]

ฟังก์ชันตัวช่วยเค้าโครงกริด

เมื่อวางแผนภูมิหลายแผนภูมิบนแผ่นงานคุณสามารถใช้ฟังก์ชันตัวช่วยเพื่อคํานวณตําแหน่งกริด:

let
    // Helper function to calculate chart bounds in a grid layout
    GetGridBounds = (
        chartNumber as number,       // 1-based chart number
        gridColumns as number,       // Number of columns in the grid
        optional width as number,    // Chart width (default: 8)
        optional height as number,   // Chart height (default: 16)
        optional hPadding as number, // Horizontal padding (default: 1)
        optional vPadding as number  // Vertical padding (default: 1)
    ) as record =>
        let
            w = width ?? 8,
            h = height ?? 16,
            hp = hPadding ?? 1,
            vp = vPadding ?? 1,
            cols = if gridColumns < 1 then 1 else gridColumns,

            x = Number.Mod(chartNumber - 1, cols) * (w + hp),
            y = Number.IntegerDivide(chartNumber - 1, cols) * (h + vp)
        in
            [FromColumn = x, FromRow = y, ToColumn = x + w, ToRow = y + h],

    buildReference = (name as text) => #table({}, {}) meta [Name = name],

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {"Data", "SalesTable", "SheetData", [], SalesData},
            // 2x2 grid of charts
            {"Dashboard", "Chart1", "Chart",
                [ChartType = "Column", Bounds = GetGridBounds(1, 2),
                 DataSeries = [AxisColumns = {"Region"}, ValueColumns = {"Revenue"}]],
                buildReference("SalesTable")},
            {"Dashboard", "Chart2", "Chart",
                [ChartType = "Line", Bounds = GetGridBounds(2, 2),
                 DataSeries = [AxisColumns = {"Region"}, ValueColumns = {"Revenue"}]],
                buildReference("SalesTable")},
            {"Dashboard", "Chart3", "Chart",
                [ChartType = "Pie", Bounds = GetGridBounds(3, 2),
                 DataSeries = [AxisColumns = {"Region"}, ValueColumns = {"Revenue"}]],
                buildReference("SalesTable")},
            {"Dashboard", "Chart4", "Chart",
                [ChartType = "Bar", Bounds = GetGridBounds(4, 2),
                 DataSeries = [AxisColumns = {"Region"}, ValueColumns = {"Revenue"}]],
                buildReference("SalesTable")}
        }
    )
in
    excelDocument

การวางตําแหน่งขั้นสูงด้วยออฟเซ็ต EMU

สําหรับการวางตําแหน่งที่แม่นยําภายในเซลล์ ให้ใช้คุณสมบัติออฟเซ็ต ออฟเซ็ตอยู่ใน EMU (หน่วยเมตริกภาษาอังกฤษ) โดยที่ 914400 EMU เท่ากับ 1 นิ้ว

ทรัพย์สิน ประเภท คำอธิบาย
จากคอลัมน์ออฟเซ็ต เลข ออฟเซ็ตจากขอบด้านซ้ายของเซลล์เริ่มต้น (ใน EMU)
จากแถวออฟเซ็ต เลข ออฟเซ็ตจากขอบด้านบนของเซลล์เริ่มต้น (ใน EMU)
ถึงคอลัมน์ออฟเซ็ต เลข ออฟเซ็ตจากขอบซ้ายของเซลล์สิ้นสุด (ใน EMU)
ทอโรว์ออฟเซ็ต เลข ออฟเซ็ตจากขอบด้านบนของเซลล์สิ้นสุด (ใน EMU)
[Bounds = [
    FromColumn = "C",
    FromColumnOffset = 352425,
    FromRow = 6,
    FromRowOffset = 142874,
    ToColumn = "R",
    ToColumnOffset = 142875,
    ToRow = 22,
    ToRowOffset = 171449
]]

ชนิดแผนภูมิที่รองรับ

ชนิดแผนภูมิ คำอธิบาย
Area แผนภูมิพื้นที่
Area3D แผนภูมิพื้นที่ 3 มิติ
Bar กราฟแท่งแนวนอน
Bar3D แผนภูมิแท่งแนวนอน 3 มิติ
Column แผนภูมิคอลัมน์แนวตั้ง
Column3D แผนภูมิคอลัมน์แนวตั้ง 3 มิติ
Doughnut แผนภูมิโดนัท (รูปวงแหวน)
Line แผนภูมิเส้น
Line3D แผนภูมิเส้น 3 มิติ
Pie แผนภูมิวงกลม
Pie3D แผนภูมิวงกลม 3 มิติ
Radar แผนภูมิเรดาร์
StackedBar แผนภูมิแท่งแนวนอนแบบเรียงซ้อน
StackedBar100 แผนภูมิแท่งแนวนอนแบบเรียงซ้อน 100%
StackedColumn แผนภูมิคอลัมน์แนวตั้งแบบเรียงซ้อน
StackedColumn100 แผนภูมิคอลัมน์แนวตั้งแบบเรียงซ้อน 100%

การกําหนดค่า DataSeries

DataSeriesเรกคอร์ดจะกําหนดวิธีที่ข้อมูลของคุณแมปกับองค์ประกอบแผนภูมิ:

ทรัพย์สิน ประเภท จำเป็นต้องระบุ คำอธิบาย
แกนคอลัมน์ รายการหรือข้อความ ใช่* ชื่อคอลัมน์อย่างน้อยหนึ่งชื่อเพื่อใช้เป็นแกนแผนภูมิ (ประเภท)
คอลัมน์ค่า รายการหรือข้อความ ใช่* ชื่อคอลัมน์อย่างน้อยหนึ่งชื่อเพื่อใช้เป็นค่าแผนภูมิ (ชุดข้อมูล)
PrimaryAxis คอลัมน์ SMS ไม่ใช่ เมื่อใช้คอลัมน์หลายแกน ให้ระบุว่าคอลัมน์ใดทําหน้าที่เป็นป้ายชื่อแกนหลัก

* จําเป็น เว้นแต่จะมีการกําหนดค่า a ChartInferenceFunction ในคุณสมบัติของเวิร์กบุ๊ก หากไม่มีการอนุมาน การ AxisColumns ละเว้นจะทําให้เกิดข้อผิดพลาด "ไม่มีคอลัมน์แกนให้" และการละเว้น ValueColumns จะทําให้เกิดข้อผิดพลาด "ไม่มีคอลัมน์ค่าให้"

AxisColumnsและValueColumnsระบุคอลัมน์ในสคีมาตาราง Power Query ต้นทางของแผนภูมิ ชื่อของพวกเขาต้องแยกตัวพิมพ์เล็กและต้องตรงกับสคีมานั้นอย่างแม่นยํา มันไม่ใช่ตัวอักษรคอลัมน์ในแผ่นงาน Excel

ตัวอย่างที่มีการกําหนดค่าแผนภูมิที่ชัดเจน

let
    // Quarterly data by region
    quarterlyData = #table(
        type table [Quarter = text, North = number, South = number, East = number, West = number],
        {
            {"Q1", 95000, 78000, 37000, 50000},
            {"Q2", 102000, 85000, 42000, 58000}
        }
    ),

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {"SalesChart", "QuarterlySales", "Chart",
                [
                    ChartType = "StackedColumn",
                    ChartTitle = "Quarterly Revenue by Region",
                    DataSeries = [
                        AxisColumns = {"Quarter"},
                        ValueColumns = {"North", "South", "East", "West"}
                    ]
                ],
                quarterlyData
            }
        }
    )
in
    excelDocument

แผนภูมิแกนหลายระดับ

สําหรับข้อมูลประเภทลําดับชั้น คุณสามารถระบุคอลัมน์แกนได้หลายคอลัมน์:

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {"ProductChart", "Sales", "Chart",
                [
                    ChartType = "Column",
                    ChartTitle = "Product Sales by Category",
                    DataSeries = [
                        AxisColumns = {"Category", "Product"},
                        ValueColumns = {"Revenue"},
                        PrimaryAxisColumn = "Product"  // Use Product as the label
                    ]
                ],
                SalesData
            }
        }
    )
in
    excelDocument

การใช้ Office.InferChartPropertiesGenerator

ฟังก์ชันนี้จะ Office.InferChartPropertiesGenerator สร้างกลไกการอนุมานที่กําหนดคุณสมบัติของแผนภูมิโดยอัตโนมัติตามข้อมูลของคุณ ความสามารถนี้มีประโยชน์เมื่อคุณต้องการค่าเริ่มต้นที่เหมาะสมโดยไม่ต้องระบุรายละเอียดการกําหนดค่าแผนภูมิทั้งหมด

สำคัญ

หากไม่มีฟังก์ชันการอนุมานแผนภูมิคุณต้องระบุDataSeriesทั้งและAxisColumnsValueColumnsสําหรับทุกแผนภูมิอย่างชัดเจน การละเว้นพารามิเตอร์ที่จําเป็นเหล่านี้จะส่งผลให้เกิดข้อผิดพลาด

การใช้งานพื้นฐาน

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {null, null, "Workbook",
                [ChartInferenceFunction = Office.InferChartPropertiesGenerator()],
                null
            },
            // Charts without explicit ChartType will use inference
            {"Chart1", "AutoChart", "Chart", [], SalesData}
        }
    )
in
    excelDocument

ตัวเลือกการอนุมาน

Office.InferChartPropertiesGenerator ยอมรับเรกคอร์ดที่ไม่บังคับด้วยตัวเลือกต่อไปนี้:

ตัวเลือก ประเภท ค่าเริ่มต้น คำอธิบาย
Allow3DC ฮาร์ท มีเหตุผล เท็จ เมื่อ trueกลไกจัดการการอนุมานอาจเลือกชนิดแผนภูมิ 3 มิติสําหรับข้อมูลที่เหมาะสม
PreferMultilevelChart การอนุมาน มีเหตุผล เท็จ เมื่อ trueใช้คอลัมน์ที่ไม่ใช่ตัวเลขนําหน้าทั้งหมดเป็นคอลัมน์แกนสําหรับแผนภูมิหลายระดับ

ตัวอย่างพร้อมตัวเลือกการอนุมาน

let
    chartInference = Office.InferChartPropertiesGenerator([
        Allow3DCharts = true,
        PreferMultilevelChartInference = true
    ]),

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {null, null, "Workbook",
                [ChartInferenceFunction = chartInference],
                null
            },
            {"Sales", "SalesChart", "Chart", 
                [DataSeries = [AxisColumns = {"Region"}, ValueColumns = {"Revenue"}]],
                SalesData
            }
        }
    )
in
    excelDocument

การอนุมานทํางานอย่างไร

กลไกจัดการการอนุมานจะส่งคืนเรกคอร์ดที่มีสามฟังก์ชัน:

  • ChartType: วิเคราะห์ Schema ข้อมูลและกําหนดชนิดแผนภูมิที่เหมาะสมที่สุดโดยอิงจาก:

    • จํานวนชุดข้อมูล
    • จํานวนหมวดหมู่
    • คอลัมน์แกนเป็นวันที่และเวลา ตัวเลข หรือหมวดหมู่
    • จำนวนแถว
  • ChartTitle: สร้างชื่อที่สื่อความหมายตามประเภทแผนภูมิและชื่อคอลัมน์

  • DataSeries: อนุมานแกนและคอลัมน์ค่าจากสคีมาตาราง:

    • คอลัมน์วันที่และเวลาเป็นคอลัมน์แกน
    • คอลัมน์ตามหมวดหมู่ (ข้อความ) จะได้รับการพิจารณาสําหรับคอลัมน์แกน
    • คอลัมน์ตัวเลขจะกลายเป็นคอลัมน์ค่า

ตรรกะการเลือกชนิดแผนภูมิ

กลไกจัดการการอนุมานจะเลือกชนิดแผนภูมิตามลักษณะของข้อมูล:

ลักษณะข้อมูล ประเภทแผนภูมิอนุมาน
ชุดเดี่ยว ≤6 หมวดหมู่แกนหมวดหมู่ วงกลม
ชุดเดี่ยว 7-15 หมวดหมู่แกนหมวดหมู่ โดนัท
แกนวันที่และเวลา เส้นหรือพื้นที่
ซีรีส์ ≥3 ≤15 หมวดหมู่ เรดาร์
หลายชุด 3-25 หมวดหมู่ แถบซ้อน
ชุดเดี่ยว ไม่กี่หมวดหมู่ คอลัมน์
หลายหมวดหมู่ แท่งแนวนอน

ฟังก์ชันการอนุมานแบบกําหนดเอง

คุณสามารถจัดเตรียมฟังก์ชันการอนุมานของคุณเองที่เป็นไปตามอินเทอร์เฟซเดียวกัน:

let
    customInference = () as record => [
        ChartType = (partName, columns, dataSeries, rowCount) => 
            if rowCount < 10 then "Pie" else "Column",
        
        ChartTitle = (partName, chartType, dataSeries) => 
            partName & " Chart",
        
        DataSeries = (partName, columns) => [
            AxisColumns = {"Category"},
            ValueColumns = {"Revenue"}
        ]
    ],

    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {null, null, "Workbook",
                [ChartInferenceFunction = customInference],
                null
            },
            {"Data", "CustomChart", "Chart", [], SalesData}
        }
    )
in
    excelDocument

สถานการณ์ขั้นสูง

ส่วนนี้ครอบคลุมวิธีการแบบเป็นโปรแกรมสําหรับการสร้างตารางการนําทางแบบไดนามิก

การแบ่งพาร์ติชันข้อมูลออกเป็นหลายแผ่น

คุณสามารถใช้ฟังก์ชันรายการและตารางของ Power Query เพื่อสร้างแผ่นงานแบบไดนามิกตามค่าข้อมูล

การใช้ Table.Group

จัดกลุ่มข้อมูลตามคอลัมน์และสร้างแผ่นงานสําหรับแต่ละกลุ่ม:

let
    groupedData = Table.Group(
        SalesData, 
        {"Region"}, 
        {{"RegionData", each _, type table}}
    ),

    excelDocument = Table.FromRecords(
        List.Transform(
            Table.ToRecords(groupedData),
            (row) => [
                Sheet = row[Region],
                PartType = "SheetData",
                Data = row[RegionData]
            ]
        )
    )
in
    excelDocument

การใช้ Table.Partition

แบ่งตารางออกเป็นกลุ่มตามฟังก์ชันแฮชแบบกําหนดเอง ตัวอย่างนี้แบ่งข้อมูลการขายออกเป็นกลุ่มรายได้:

let
    Low_Revenue_Group_Index = 0,
    Medium_Revenue_Group_Index = 1,
    High_Revenue_Group_Index = 2,
    NumberOfPartitions = 3,

    RevenueRangeHash = (revenue as number) as number => 
        if revenue >= 40000 then High_Revenue_Group_Index
        else if revenue >= 25000 then Medium_Revenue_Group_Index
        else Low_Revenue_Group_Index,
    
    PartitionedList = Table.Partition(
        SalesData, 
        "Revenue", 
        NumberOfPartitions, 
        RevenueRangeHash 
    ),
    
    BucketNames = {
        "Low Revenue (< $25K)",      
        "Medium Revenue ($25K - $40K)", 
        "High Revenue (> $40K)"    
    },
    
    NamedPartitions = Table.FromColumns(
        {BucketNames, PartitionedList},
        type table [Sheet = text, Data = table]
    ),

    excelDocument = Table.AddColumn(NamedPartitions, "PartType", each "SheetData", type text)
in
    excelDocument

ฟังก์ชั่นการแบ่งพาร์ติชันแบบกําหนดเอง

สําหรับการควบคุมเพิ่มเติม ให้ใช้ฟังก์ชันการแบ่งพาร์ติชันแบบกําหนดเอง:

let
    partitionByColumn = (table as table, columnName as text, maxPartitions as number) as table =>
        let
            distinctValues = List.Distinct(Table.Column(table, columnName)),
            limitedValues = List.FirstN(distinctValues, maxPartitions),
            partitionedTable = Table.FromRecords(
                List.Transform(
                    limitedValues, 
                    (value) => [
                        Sheet = columnName & " - " & Text.From(value),
                        PartType = "SheetData",
                        Data = Table.SelectRows(table, each Record.Field(_, columnName) = value)
                    ]
                )
            )
        in
            partitionedTable,

    // Create sheets for each unique Region value (up to 10)
    excelDocument = partitionByColumn(SalesData, "Region", 10)
in
    excelDocument

แผนภูมิแบบไดนามิกสําหรับข้อมูลที่แบ่งพาร์ติชัน

รวมการแบ่งพาร์ติชันกับแผนภูมิเพื่อสร้างการแสดงภาพสําหรับแต่ละกลุ่ม:

let
    buildReference = (name as text) => #table({}, {}) meta [Name = name],

    createPartitionWithChart = (table as table, columnName as text) as table =>
        let
            distinctValues = List.Distinct(Table.Column(table, columnName)),
            partitionRows = List.Transform(
                distinctValues,
                (value) => 
                    let
                        partitionData = Table.SelectRows(table, each Record.Field(_, columnName) = value),
                        sheetName = Text.From(value),
                        dataName = "Data_" & sheetName,
                        chartName = "Chart_" & sheetName
                    in
                        {
                            {sheetName, dataName, "SheetData", [], partitionData},
                            {sheetName & " Chart", chartName, "Chart", 
                                [ChartType = "Column", ChartTitle = sheetName & " Analysis"],
                                buildReference(dataName)}
                        }
            ),
            workbookRow = {{null, null, "Workbook", [ChartInferenceFunction = Office.InferChartPropertiesGenerator()], null}}
        in
            #table(
                type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
                List.Combine({workbookRow} & partitionRows)
            ),

    excelDocument = createPartitionWithChart(SalesData, "Region")
in
    excelDocument

รูปแบบทั่วไป

ส่วนนี้แสดงเทมเพลตที่พร้อมใช้งานสําหรับสถานการณ์ที่พบบ่อย คัดลอกและปรับรูปแบบเหล่านี้ให้ตรงกับความต้องการของคุณ

รูปแบบ: การส่งออกข้อมูลอย่างง่าย

ส่งออกตารางเดียวไปยัง Excel ด้วยการกําหนดค่าขั้นต่ํา:

let
    excelDocument = #table(
        type table [PartType = nullable text, Data = any],
        {{"SheetData", YourDataTable}}
    )
in
    excelDocument

รูปแบบ: แผ่นงานหลายแผ่นจากรายการ

สร้างแผ่นงานหนึ่งแผ่นต่อรายการในรายการ:

let
    // Assume you have a list of {Name, Table} pairs
    dataSets = {
        {"Sales", SalesTable},
        {"Inventory", InventoryTable},
        {"Customers", CustomersTable}
    },
    
    excelDocument = #table(
        type table [Sheet = text, PartType = text, Data = table],
        List.Transform(dataSets, each {_{0}, "SheetData", _{1}})
    )
in
    excelDocument

รูปแบบ: ข้อมูลที่มีแผนภูมิบนแผ่นงานเดียวกัน

สร้างชีตที่มีทั้งข้อมูลและการแสดงภาพ:

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {null, null, "Workbook", [ChartInferenceFunction = Office.InferChartPropertiesGenerator()], null},
            {"Report", "SalesChart", "Chart", 
                [ChartType = "Column", Bounds = "F2:M18"], 
                YourDataTable
            }
        }
    )
in
    excelDocument

รูปแบบ: แดชบอร์ดที่มีแผนภูมิหลายแผนภูมิแบ่งปันข้อมูล

สร้างชีตแดชบอร์ดที่มีแผนภูมิหลายแผนภูมิที่อ้างอิงแหล่งข้อมูลเดียว:

let
    ref = (name as text) => #table({}, {}) meta [Name = name],
    
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {"Data", "SourceData", "SheetData", [], YourDataTable},
            {"Dashboard", "Chart1", "Chart", 
                [ChartType = "Column", Bounds = "A1:H16", 
                 DataSeries = [AxisColumns = {"Category"}, ValueColumns = {"Value1"}]], 
                ref("SourceData")},
            {"Dashboard", "Chart2", "Chart", 
                [ChartType = "Line", Bounds = "J1:Q16", 
                 DataSeries = [AxisColumns = {"Category"}, ValueColumns = {"Value2"}]], 
                ref("SourceData")}
        }
    )
in
    excelDocument

รูปแบบ: โต๊ะเคียงข้างกัน

วางตารางสองตารางติดกันบนแผ่นงานเดียวกัน:

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {"Report", "MainData", "Table", 
                [StartCell = "A1", TableStyle = "TableStyleMedium2"], 
                MainTable},
            {"Report", "Summary", "Table", 
                [StartCell = "H1", TableStyle = "TableStyleLight15"], 
                SummaryTable}
        }
    )
in
    excelDocument

รูปแบบ: โต๊ะเรียงซ้อนพร้อมการวางตําแหน่งอัตโนมัติ

วางซ้อนหลายตารางในแนวตั้งด้วยระยะห่างอัตโนมัติ:

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {"Report", "Section1", "Table", [], Table1},
            {"Report", "Section2", "Table", [AutoPositionRowOffset = 2], Table2},
            {"Report", "Section3", "Table", [AutoPositionRowOffset = 2], Table3}
        }
    )
in
    excelDocument

รูปแบบ: ล้างรายงานโดยไม่มีเส้นตาราง

สร้างรายงานที่สวยงามด้วยเส้นตารางที่ซ่อนอยู่:

let
    excelDocument = #table(
        type table [Sheet = nullable text, Name = nullable text, PartType = nullable text, Properties = nullable record, Data = any],
        {
            {"Report", "Data", "Table", 
                [StartCell = "B2", ShowGridlines = false, TableStyle = "TableStyleMedium9"], 
                YourDataTable}
        }
    )
in
    excelDocument

หมายเหตุและข้อจำกัด

ขีดจํากัดของ Excel

Excel มีข้อจํากัดโดยธรรมชาติที่ส่งผลต่อการสร้างเอกสาร:

  • แถวสูงสุดต่อแผ่นงาน: 1,048,576 แถว
  • คอลัมน์สูงสุดต่อแผ่นงาน: 16,384 คอลัมน์
  • อักขระสูงสุดต่อเซลล์: 32,767 อักขระ
  • ความยาวสูงสุดของชื่อแผ่นงาน: 31 อักขระ
  • ชื่อแผ่นงานไม่สามารถมี: \ / ? * [ ] หรือขึ้นต้น/ลงท้ายด้วย '

เมื่อข้อมูลของคุณเกินขีดจํากัดเหล่านี้ ให้พิจารณาแบ่งพาร์ติชันข้อมูลในหลายแผ่นงาน

การจัดการข้อผิดพลาด

ข้อผิดพลาดระดับเซลล์ในข้อมูลของคุณทําให้การสร้างเอกสารล้มเหลว ตัวเชื่อมต่อจะตรวจสอบความถูกต้องของข้อมูลขณะประมวลผลแต่ละแถว และพบค่าความผิดพลาด (เช่น การหารด้วยศูนย์หรือข้อผิดพลาดในการแปลงชนิด) จะทําให้เกิดข้อยกเว้น

เพื่อป้องกันความล้มเหลว:

  • ใช้ try...otherwise นิพจน์เพื่อจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นก่อนส่งออก
  • แทนที่ค่าความผิดพลาดด้วยค่าเริ่มต้นหรือค่า Null ที่เหมาะสม
  • ตรวจสอบคุณภาพข้อมูลก่อนสร้างตารางการนําทางของคุณ
let
    RawData = #table(
        type table [Product = text, Amount = text],
        {
            {"Laptop", "1250.50"},
            {"Phone", "N/A"},
            {"Tablet", "850.00"}
        }
    ),
    
    cleanData = Table.TransformColumns(
        RawData,
        {{"Amount", each try Number.From(_) otherwise null, type nullable number}}
    ),
    
    excelDocument = #table(
        type table [PartType = nullable text, Data = any],
        {{"SheetData", cleanData}}
    )
in
    excelDocument

การจัดการชื่อ

ชื่อแผ่นงานและชิ้นส่วนจะถูกฆ่าเชื้อโดยอัตโนมัติเพื่อให้สอดคล้องกับกฎการตั้งชื่อ Excel อักขระที่ไม่ถูกต้องจะถูกลบออก และชื่อจะถูกตัดทอนเป็น 31 อักขระ ถ้า StrictNameHandling เปิดใช้งานในคุณสมบัติ เวิร์กบุ๊ก ข้อผิดพลาดจะถูกส่งแทนการฆ่าเชื้ออัตโนมัติ

ชื่อแผ่นงานที่ซ้ํากันจะถูกทําให้ไม่ซ้ํากันโดยอัตโนมัติโดยการต่อท้ายตัวเลข

แก้ไข ปัญหา

ส่วนนี้ครอบคลุมข้อผิดพลาดทั่วไปที่คุณอาจพบเมื่อสร้างตารางการนําทางและวิธีแก้ไข

การอ้างอิงข้อผิดพลาด

รหัสข้อผิดพลาด ข้อความแสดงข้อผิดพลาด วิธีการแก้ไข
10950 ไม่มี {field} สําหรับส่วนเอกสารในแถว {row} ตรวจสอบให้แน่ใจว่าแต่ละแถวในตารางการนําทางของคุณมีคอลัมน์ที่จําเป็นทั้งหมด สําหรับส่วน SheetData ให้ระบุ Data คอลัมน์ด้วยค่าตาราง สําหรับส่วนของแผนภูมิ ให้ระบุข้อมูลแบบอินไลน์หรือการอ้างอิงตารางที่ถูกต้อง
10951 ชื่อชิ้นส่วนที่ซ้ํากัน: {name} แต่ละแถวในตารางการนําทางต้องมีค่าที่ไม่ซ้ํากันName เปลี่ยนชื่อส่วนใดส่วนหนึ่งที่ซ้ํากันเพื่อแก้ไขข้อผิดพลาดนี้
10953 ชื่อคอนเทนเนอร์ '{name}' ไม่ถูกต้อง ลองใช้ '{suggestion}' แทน ชื่อแผ่นงานมีอักขระ (\ / ? * [ ]) ที่ไม่ถูกต้องหรือปัญหาการจัดรูปแบบ ใช้ชื่อทางเลือกที่แนะนําหรือเปิดใช้งานการฆ่าเชื้ออัตโนมัติโดยละเว้นStrictNameHandlingหรือตั้งค่าเป็นfalse
10954 คอนเทนเนอร์ที่ซ้ํากัน '{name}' แต่ละส่วนของเอกสาร (แถว) ต้องมีค่าที่ไม่ซ้ํากันในคอลัมน์ คอนเทนเนอร์ สองส่วนมีค่าเท่ากันSheet เมื่อใช้ SheetDataแต่ละแผ่นงานสามารถสร้างได้เพียงครั้งเดียวเท่านั้น สําหรับหลายภูมิภาคในแผ่นเดียวกัน ให้ใช้ Table, Range, หรือ Text ชิ้นส่วนแทน
10955 ชื่อที่ซ้ํากัน '{name}' แต่ละส่วนของเอกสาร (แถว) ต้องมีชื่อที่ไม่ซ้ํากัน สองส่วนที่ผูกไว้กับข้อมูลมีค่าเท่ากันName แต่ละส่วนที่ผูกไว้กับข้อมูลต้องมีชื่อที่ไม่ซ้ํากัน เนื่องจากจะลงทะเบียนแหล่งข้อมูลที่ส่วนอื่นสามารถอ้างอิงได้ เปลี่ยนชื่อส่วนใดส่วนหนึ่ง
10956 ไม่พบตารางอ้างอิง '{name}' เมื่อใช้การอ้างอิงตาราง (ตาราง Name ว่างที่มีข้อมูลเมตา) ตรวจสอบให้แน่ใจว่าการอ้างอิง Name ตรงกับค่าของ Name ส่วนข้อมูล ตรวจสอบการพิมพ์ผิดและคํานึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
10959 AxisColumns ต้องเป็นค่าข้อความเดียวหรือรายการข้อความ AxisColumnsคุณสมบัติมีชนิดที่ไม่ถูกต้อง ระบุค่าข้อความ เช่น "Category" หรือรายการ เช่น{"Region", "Year"}
10962 ValueColumns ต้องเป็นข้อความเดียว รายการข้อความ หรือเรกคอร์ด ValueColumnsคุณสมบัติมีชนิดที่ไม่ถูกต้อง ระบุค่าข้อความ เช่น "Revenue" หรือรายการ เช่น{"Revenue", "Units"}
10963 ไม่มีคอลัมน์ค่าที่ระบุไว้สําหรับส่วน '{name}' ระบุคุณสมบัติ 'ValueColumns' สําหรับแผนภูมิที่ไม่มี ChartInferenceFunctionคุณต้องระบุValueColumnsอย่างชัดเจนในเรกคอร์ดDataSeries เพิ่ม ValueColumns = {"Column1", "Column2"} ลงในแผนภูมิ DataSeriesของคุณ
10966 ไม่มีคอลัมน์แกนสําหรับส่วน '{name}' ให้คุณสมบัติ 'AxisColumns' แก่พวกเขา สําหรับแผนภูมิที่ไม่มี ChartInferenceFunctionคุณต้องระบุAxisColumnsอย่างชัดเจนในเรกคอร์ดDataSeries เพิ่ม AxisColumns = {"CategoryColumn"} ลงในแผนภูมิ DataSeriesของคุณ
10968 ไม่สามารถกําหนดแกนหรือคอลัมน์ค่าที่เหมาะสมสําหรับส่วน '{name}' ตรวจสอบชนิดข้อมูลคอลัมน์ กลไกจัดการการอนุมานไม่สามารถระบุคอลัมน์ที่เหมาะสมได้ ตรวจสอบให้แน่ใจว่าตารางของคุณมีคอลัมน์หมวดหมู่/วันที่และเวลาอย่างน้อยหนึ่งคอลัมน์ (สําหรับแกน) และคอลัมน์ตัวเลขหนึ่งคอลัมน์ (สําหรับค่า) หรือระบุอย่างชัดเจน
10970 คอลัมน์แกน '{column}' ไม่อยู่ใน Schema ชื่อคอลัมน์ที่ระบุในไม่มี AxisColumns อยู่ในตารางข้อมูลของคุณ ตรวจสอบว่าชื่อคอลัมน์ตรงกันทุกประการ (คํานึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่)
10971 คอลัมน์ค่า '{column}' ไม่อยู่ใน Schema ชื่อคอลัมน์ที่ระบุในไม่มี ValueColumns อยู่ในตารางข้อมูลของคุณ ตรวจสอบว่าชื่อคอลัมน์ตรงกันทุกประการ (คํานึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่)
10972 คอลัมน์ค่า '{column}' ต้องเป็นตัวเลข แต่เป็น '{type}' คอลัมน์ค่าแผนภูมิต้องมีข้อมูลตัวเลข แปลงคอลัมน์เป็นชนิดตัวเลขโดยใช้ Table.TransformColumnTypesหรือเลือกคอลัมน์อื่น
10981 ค่าที่ไม่รู้จัก '{value}' สําหรับ enum '{enum}' มีการระบุค่าที่ไม่ถูกต้องสําหรับคุณสมบัติเช่น ChartType หรือPartType ตรวจสอบเอกสารประกอบสําหรับค่าที่ถูกต้อง
10985 ข้อผิดพลาดในการอ้างอิงตาราง: พบตารางว่างเปล่าที่ไม่มีข้อมูลเมตา 'ชื่อ' ที่ชี้ไปที่แถวข้อมูล เมื่อใช้ตารางเปล่าเป็นการอ้างอิงข้อมูล จะต้องมี Name ข้อมูลเมตา ใช้ #table({}, {}) meta [Name = "DataPartName"] เพื่อสร้างการอ้างอิงที่ถูกต้อง
10986 ส่วนของประเภท '{type}' ในไฟล์ '{format}' ต้องมีตารางเป็นข้อมูล ไม่อนุญาตให้ใช้ TableReference SheetData, และTableRangeส่วนต่างๆ ต้องมีข้อมูลตารางแบบอินไลน์ และไม่สามารถใช้การอ้างอิงตารางได้ เฉพาะชิ้นส่วนของแผนภูมิเท่านั้นที่สามารถอ้างอิงข้อมูลจากส่วนอื่นได้
10987 ส่วนของชนิด '{type}' ต้องมีตารางหรือการอ้างอิงตารางเป็นข้อมูล ส่วนนี้ต้องการตารางหรือการอ้างอิงตารางที่ถูกต้องใน Data คอลัมน์ ตรวจสอบให้แน่ใจว่าคุณกําลังระบุค่าตาราง ไม่ใช่ค่า null หรือชนิดอื่น
10988 {field} ไม่สามารถเป็น null หรือช่องว่างได้ Sheetชื่อหรือช่องอื่นที่ต้องระบุว่างเปล่าหรือมีเพียงช่องว่างเท่านั้น ระบุค่าที่ไม่ว่างเปล่าที่ถูกต้อง
10989 ไม่รองรับประเภทชิ้นส่วน '{type}' ใช้ประเภทชิ้นส่วนที่ถูกต้อง: Workbook, SheetData, Table, Range, Text, หรือ Chart. ตรวจสอบการพิมพ์ผิดใน PartType คอลัมน์
10990 ส่วน {type} ที่มีตัวเลือกเอกสารต้องเป็นส่วนแรก (แถว) ในตาราง Workbookส่วน (ที่มีตัวเลือกเช่น ChartInferenceFunction) ต้องเป็นแถวแรกในตารางการนําทางของคุณ จัดลําดับแถวใหม่ตามนั้น
30005 ฟังก์ชันการอนุมานแผนภูมิไม่พร้อมใช้งานสําหรับส่วน '{name}' ตั้งค่าคุณสมบัติ {property} ด้วยตนเอง เพิ่มส่วนเป็น Workbook แถวแรกด้วย [ChartInferenceFunction = Office.InferChartPropertiesGenerator()]Propertiesหรือระบุคุณสมบัติที่จําเป็นบนแผนภูมิด้วยตนเอง
30006 ฟังก์ชันการอนุมานแผนภูมิไม่ส่งกลับ ChartType ที่ถูกต้องสําหรับส่วน '{name}' กลไกจัดการการอนุมานไม่สามารถกําหนดชนิดแผนภูมิที่เหมาะสมสําหรับข้อมูลของคุณได้ ระบุ ChartType อย่างชัดเจนในเรกคอร์ดของ Properties แผนภูมิ
30018 ค่าที่ระบุไม่สามารถแสดงได้ใน Excel ข้อมูลประกอบด้วยค่าที่ไม่สามารถเก็บไว้ใน Excel ได้ เช่น วันที่ก่อนปี 1900 หรือระยะเวลาที่อยู่นอกช่วงของ Excel กรองหรือแปลงข้อมูลเพื่อลบค่าที่ไม่รองรับ
30019 เกินขีดจํากัดคอลัมน์ Excel ของ {limit} คอลัมน์ ตารางของคุณมีคอลัมน์มากกว่าที่ Excel รองรับ (16,384) ลดจํานวนคอลัมน์หรือแบ่งข้อมูลออกเป็นหลายตาราง
30020 เกินขีดจํากัดแถว Excel ของ {limit} แถว ข้อมูลของคุณเกินขีดจํากัดแถวของ Excel (1,048,576) แบ่งพาร์ติชันข้อมูลในหลายแผ่นโดยใช้ Table.Partition หรือTable.Group
30059 ตรวจพบการทับซ้อนกันระหว่างส่วน '{part1}' และ '{part2}' สองส่วนในแผ่นงานเดียวกันมีช่วงเซลล์ที่ทับซ้อนกัน ปรับ StartCell ตําแหน่งหรือใช้การวางตําแหน่งอัตโนมัติ
30060 การอ้างอิงเซลล์ '{ref}' เกินขีดจํากัดของ Excel สําหรับส่วน '{name}' การ StartCell อ้างอิงระบุตําแหน่งที่อยู่นอกช่วงที่ถูกต้องของ Excel ใช้การอ้างอิงเซลล์ที่ถูกต้องภายในคอลัมน์ A-XFD และแถว 1-1048576
30062 คอนเทนเนอร์ '{name}' มีส่วน SheetData อยู่แล้ว ไม่สามารถเพิ่มช่วงและชิ้นส่วนโต๊ะได้ แผ่นงานที่มี SheetData ส่วนหนึ่งไม่สามารถมี Table หรือ Range ชิ้นส่วนได้ ใช้ SheetData อย่างเดียวหรือ Table/Range แยกส่วนร่วมกัน
30063 คอนเทนเนอร์ '{name}' มีส่วนช่วงหรือตารางอยู่แล้ว ไม่สามารถเพิ่ม SheetData ได้ แผ่นงานที่มี Table หรือ Range ชิ้นส่วนไม่สามารถมี SheetData ส่วนได้ นําชิ้นส่วนออก SheetData หรือย้ายไปยังแผ่นงานอื่น
30066 ช่วง '{name}' ไม่สามารถใช้เป็นแหล่งข้อมูลสําหรับแผนภูมิได้เนื่องจากมีการเปิดใช้งาน SkipHeader แผนภูมิต้องใช้แถวส่วนหัวเพื่อระบุชุดข้อมูล ลบ SkipHeader = true ออกจากช่วงหรือระบุข้อมูลแบบอินไลน์ลงในแผนภูมิ
30067 ค่า {property} '{value}' สําหรับส่วน '{name}' ไม่ถูกต้อง คาดว่าจะมีการอ้างอิงเซลล์เดียว ค่านี้ StartCell ไม่ใช่การอ้างอิงเซลล์ Excel ที่ถูกต้อง ใช้รูปแบบเช่น "B3" หรือ "AA100".
30068 ส่วน '{name}' ระบุ AutoPositionColumnOffset หรือ AutoPositionRowOffset แต่มี StartCell ที่ชัดเจน คุณไม่สามารถรวมออฟเซ็ตการวางตําแหน่งอัตโนมัติกับ StartCellข้อความ . ที่ชัดเจน ลบ StartCell เพื่อใช้การวางตําแหน่งอัตโนมัติ หรือลบคุณสมบัติออฟเซ็ต
30069 ส่วน '{name}' ที่มี AutoPositionColumnOffset จะเกินขีดจํากัดคอลัมน์สูงสุดของ Excel ออฟเซ็ตคอลัมน์รวมกับความกว้างของตารางเกินคอลัมน์ 16,384 ลดออฟเซ็ตหรือจํานวนคอลัมน์
30070 TableStyle '{style}' สําหรับส่วน '{name}' ไม่ถูกต้อง ใช้สไตล์ตาราง Excel ที่ถูกต้อง: TableStyleLight1-21, หรือ TableStyleMedium1-28TableStyleDark1-11
30183 ColumnSpanคุณสมบัติบนชิ้นส่วนข้อความต้องการการวางตําแหน่งอัตโนมัติ ลบ StartCell เพื่อใช้ ColumnSpan, หรือลบ ColumnSpan และแสดงพื้นที่ที่รวมเป็นช่วงที่มีขอบเขตใน StartCell.
30184 ColumnSpanคุณสมบัติในส่วน Text ไม่ใช่จํานวนเต็มตั้งแต่ 1 ถึง 16,384 ใช้จํานวนเต็มภายในขีดจํากัดคอลัมน์ Excel
30185 คุณสมบัติบน StartCell ส่วนข้อความครอบคลุมทั้งแถวหรือคอลัมน์ ใช้เซลล์เดียว ช่วงที่มีขอบเขต เช่น "B2:E2", หรือ ColumnSpan มีการกําหนดตําแหน่งอัตโนมัติ
30186 ส่วนข้อความและส่วนหนึ่ง SheetData ใช้แผ่นงานเดียวกัน ย้ายชิ้นส่วนหนึ่งไปยังแผ่นงานอื่น หรือแทนที่ SheetData ด้วยชิ้นส่วนตารางหรือช่วงที่วางตําแหน่งไว้

ปัญหาทั่วไป

ปัญหา: การสร้างเอกสารล้มเหลวโดยมีข้อผิดพลาด "ค่าหายไป" หรือ schema

สาเหตุ: ตารางการนําทางไม่มีคอลัมน์ที่จําเป็นหรือมีชนิดคอลัมน์ที่ไม่ถูกต้อง

วิธีแก้ไข: ตรวจสอบว่าตารางการนําทางของคุณมีคอลัมน์ที่ถูกต้องและมีชนิดที่เหมาะสม:

type table [
    Sheet = nullable text,        // Optional: worksheet name
    Name = nullable text,         // Unique identifier for the part
    PartType = text,              // Required: "Workbook", "SheetData", "Table", "Range", "Text", or "Chart"
    Properties = nullable record, // Configuration options
    Data = any                    // Table, table reference, or null
]

การอนุมานแผนภูมิไม่ทํางาน

ปัญหา: แผนภูมิล้มเหลวในการสร้างโดยมีข้อผิดพลาด "ไม่มีคอลัมน์แกน/ค่าที่ให้ไว้"

สาเหตุ: ไม่มี ChartInferenceFunction การกําหนดค่าและการแม็ปคอลัมน์ที่ชัดเจนหายไป

วิธีการแก้: เพิ่มส่วนสมุดงานที่มีฟังก์ชันการอนุมานเป็นแถวแรก:

{null, null, "Workbook", [ChartInferenceFunction = Office.InferChartPropertiesGenerator()], null}

หรือระบุ DataSeries อย่างชัดเจนสําหรับแต่ละแผนภูมิ:

[DataSeries = [AxisColumns = {"Category"}, ValueColumns = {"Revenue", "Profit"}]]

การอ้างอิงตารางไม่สามารถแก้ไขได้

ปัญหา: ข้อผิดพลาด "ไม่พบตารางที่อ้างอิง" เมื่อใช้การอ้างอิงตาราง

สาเหตุ: Name ข้อมูลเมตาในการอ้างอิงไม่ตรงกับส่วนข้อมูลใดๆ

วิธีแก้ไข: ตรวจสอบให้แน่ใจว่าชื่อเมตาดาต้าตรงกันทุกประการ:

let
    // Data part with name "SalesData"
    dataRow = {"Sales", "SalesData", "SheetData", [], actualTable},
    
    // Chart referencing the data - name must match
    chartRow = {"Chart", "SalesChart", "Chart", [], #table({}, {}) meta [Name = "SalesData"]}
in
    ...

ข้อผิดพลาดของชนิดข้อมูลในเซลล์

ปัญหา: การสร้างเอกสารล้มเหลวเมื่อประมวลผลบางแถว

สาเหตุ: ข้อมูลมีค่าความผิดพลาด (เช่น การหารด้วยศูนย์หรือความล้มเหลวในการแปลงประเภท)

วิธีแก้ไข: ล้างค่าความผิดพลาดก่อนส่งออก:

Table.TransformColumns(
    YourTable,
    {{"ColumnName", each try _ otherwise null}}
)

ค่าวันที่หรือเวลาที่ไม่รองรับ

ปัญหา: ข้อผิดพลาด "ค่าที่ระบุไม่สามารถแสดงได้ใน Excel" เมื่อส่งออกข้อมูลวันที่/เวลา

สาเหตุ: Excel ไม่สามารถแสดงวันที่ก่อนวันที่ 1 มกราคม 1900 หรือช่วงเวลาที่อยู่นอกช่วงที่ได้รับการสนับสนุน

วิธีแก้ไข: กรองค่าที่ไม่รองรับออกหรือแปลง:

Table.SelectRows(YourTable, each [DateColumn] >= #date(1900, 1, 1))

ข้อผิดพลาดในการผสมข้อมูลแผ่นและการผสมชิ้นส่วนที่วางตําแหน่ง

ปัญหา: รายงานข้อผิดพลาดที่ SheetData ไม่สามารถรวมกับชิ้นส่วนอื่นในแผ่นเดียวกันได้

สาเหตุ: คุณไม่สามารถรวม SheetData กับ Table, Range, หรือ Text ชิ้นส่วนบนแผ่นเดียวกันได้

วิธีแก้: ใช้ SheetData แผ่นเดียวหรือใช้ชิ้นส่วนที่จัดวางร่วมกัน:

// Option 1: Use SheetData alone
{"Sheet1", "Data", "SheetData", [], myTable}

// Option 2: Use Table, Range, or Text parts for multiple regions
{"Sheet1", "Title", "Text", [StartCell = "A1:J1"], "Sales report"},
{"Sheet1", "Table1", "Table", [StartCell = "A3"], firstTable},
{"Sheet1", "Table2", "Table", [StartCell = "F3"], secondTable}

ความขัดแย้งในการวางตําแหน่งอัตโนมัติ

ปัญหา: ข้อผิดพลาด "ส่วนระบุ AutoPositionColumnOffset หรือ AutoPositionRowOffset แต่มี StartCell ที่ชัดเจน"

สาเหตุ: คุณไม่สามารถใช้ออฟเซ็ตตําแหน่งอัตโนมัติเมื่อ StartCell มีการตั้งค่าไว้อย่างชัดเจน

วิธีแก้ไข: ลบ StartCell เพื่อใช้การวางตําแหน่งอัตโนมัติ หรือลบคุณสมบัติออฟเซ็ต:

// Auto positioning with custom offsets (no StartCell)
{"Sheet1", "Table1", "Table", [AutoPositionColumnOffset = 2, AutoPositionRowOffset = 1], myTable}

// Or explicit positioning (no offset properties)
{"Sheet1", "Table1", "Table", [StartCell = "C2"], myTable}

ชื่อแผ่นงานไม่ถูกต้อง

ปัญหา: เกิดข้อผิดพลาดในการกล่าวถึงชื่อคอนเทนเนอร์ที่ไม่ถูกต้องหรือการฆ่าเชื้อชื่ออัตโนมัติ

สาเหตุ: ชื่อแผ่นงานมีอักขระที่ไม่ถูกต้อง (\ / ? * [ ]) หรือเกิน 31 อักขระ

วิธีแก้ไข: ฆ่าเชื้อชื่อแผ่นงานของคุณล่วงหน้า:

sanitizeName = (name as text) as text =>
    let
        cleaned = Text.Replace(Text.Replace(name, "/", "-"), "\", "-"),
        truncated = Text.Start(cleaned, 31)
    in
        truncated