unioffice icon indicating copy to clipboard operation
unioffice copied to clipboard

How can I add a table to a placeholder table?

Open BenHall-1 opened this issue 3 years ago • 6 comments

Description

I cannot work out how to update a Table placeholder with a table generated by slide.AddTable - Can you please advise?

BenHall-1 avatar Aug 18 '22 07:08 BenHall-1

Welcome! Thanks for posting your first issue. The way things work here is that while customer issues are prioritized, other issues go into our backlog where they are assessed and fitted into the roadmap when suitable. If you need to get this done, consider buying a license which also enables you to use it in your commercial products. More information can be found on https://unidoc.io/

github-actions[bot] avatar Aug 18 '22 07:08 github-actions[bot]

Hi @BenHall-1,

Can you share the code, current PPTX result and desired PPTX result?

Best regards, Alip

sampila avatar Aug 18 '22 15:08 sampila

Hey @sampila, sure.

func Table(slide presentation.Slide, tableIndex uint32, data XXX) *common.Table {
	p, _ := slide.GetPlaceholderByIndex(tableIndex)
	
	tbl := slide.AddTable()

	for _ = range data.XXX.Cols {
		c := tbl.AddCol()
		c.SetWidth(1.0 * measurement.Inch)
	}

	headerRow := tbl.AddRow()
	headerRow.SetHeight(measurement.Inch)
	for i, cell := range headerRow.Cells() {
		cell.TxBody = dml.NewCT_TextBody()

		para := dml.NewCT_TextParagraph()
		cell.TxBody.P = append(cell.TxBody.P, para)

		egtr := dml.NewEG_TextRun()
		para.EG_TextRun = append(para.EG_TextRun, egtr)
		egtr.R = dml.NewCT_RegularTextRun()
		egtr.R.T = data.XXX.Cols[i]
	}
	return tbl
}

It currently returns not_working_1.pptx

However I'd expect a result of expected_result.pptx but I cannot work out how to get it to go onto the placeholder

BenHall-1 avatar Aug 19 '22 06:08 BenHall-1

Hi @BenHall-1,

Thank you sharing the code and PPTX file, we will check and give you an update later.

sampila avatar Aug 19 '22 11:08 sampila

Hi @sampila, any update on this?

BenHall-1 avatar Aug 22 '22 12:08 BenHall-1

Hi @BenHall-1,

Regarding this the current UniOffice only supports paragraphs inside placeholders. For positioning the table inside the slide, you can probably use the 'table.SetOffsetX' and 'table.SetOffSetY'.

See Examples: https://github.com/unidoc/unioffice-examples/blob/f47e46c076d1fc7fab6dbec68824a400c257ca54/presentation/tables/main.go#L59 API: https://apidocs.unidoc.io/unioffice/v1.20.0/github.com/unidoc/unioffice/common/#Table

Best regards, Alip

sampila avatar Sep 17 '22 11:09 sampila

Hi @BenHall-1, We released UniOffice v1.24.0 that support table placeholder, example

// Copyright UniDoc ehf. All rights reserved.
package main

import (
	"fmt"
	"log"
	"os"

	"github.com/unidoc/unioffice/common/license"
	"github.com/unidoc/unioffice/measurement"
	"github.com/unidoc/unioffice/presentation"
	"github.com/unidoc/unioffice/schema/soo/dml"
	"github.com/unidoc/unioffice/schema/soo/pml"
)

func init() {
	// Make sure to load your metered License API key prior to using the library.
	// If you need a key, you can sign up and create a free one at https://cloud.unidoc.io
	err := license.SetMeteredKey(os.Getenv(`UNIDOC_LICENSE_API_KEY`))
	if err != nil {
		panic(err)
	}
}

func main() {
	ppt, err := presentation.Open("placeholder.pptx")
	if err != nil {
		panic(err)
	}
	defer ppt.Close()

	slides := ppt.Slides()
	for _, slide := range slides {
		placeholders := slide.PlaceHolders()
		for _, ph := range placeholders {
			// Add table into placeholder that having type table placeholder.
			if ph.Type() == pml.ST_PlaceholderTypeTbl {
				tbl := ph.AddTable()

				for ci := 0; ci < 4; ci++ {
					col := tbl.AddCol()
					col.SetWidth(measurement.Millimeter * 52)
				}
				for ri := 0; ri < 3; ri++ {
					row := tbl.AddRow()
					row.SetHeight(measurement.Inch)
					for ci, cell := range row.Cells() {
						cell.TxBody = dml.NewCT_TextBody()

						para := dml.NewCT_TextParagraph()
						cell.TxBody.P = append(cell.TxBody.P, para)

						egtr := dml.NewEG_TextRun()
						para.EG_TextRun = append(para.EG_TextRun, egtr)
						egtr.R = dml.NewCT_RegularTextRun()
						egtr.R.T = fmt.Sprintf("Cell %d:%d", ri, ci)
					}
				}

				style := dml.NewCT_TableStyle()
				style.WholeTbl = dml.NewCT_TablePartStyle()
				tcStyle := dml.NewCT_TableStyleCellStyle()
				tcStyle.Fill = dml.NewCT_FillProperties()
				tcStyle.Fill.SolidFill = dml.NewCT_SolidColorFillProperties()
				tcStyle.Fill.SolidFill.SrgbClr = dml.NewCT_SRgbColor()
				tcStyle.Fill.SolidFill.SrgbClr.ValAttr = "FF9900"
				style.WholeTbl.TcStyle = tcStyle
				tbl.SetStyle(style)

				tbl.SetOffsetX(measurement.Inch)
				tbl.SetOffsetY(measurement.Millimeter * 20)

				// Remove placeholder after the table being added.
				err := ph.Remove()
				if err != nil {
					log.Fatal(err)
				}
			}
		}
	}

	ppt.SaveToFile("result.pptx")
}

sampila avatar Jun 08 '23 14:06 sampila

Closing this issue

sampila avatar Jun 08 '23 14:06 sampila