How can I add a table to a placeholder table?
BenHall-1 opened this issue · comments
Description
I cannot work out how to update a Table placeholder with a table generated by slide.AddTable
- Can you please advise?
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/
Hi @BenHall-1,
Can you share the code, current PPTX result and desired PPTX result?
Best regards,
Alip
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
Hi @BenHall-1,
Thank you sharing the code and PPTX file, we will check and give you an update later.
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
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")
}
Closing this issue