Closed BenHall-1 closed 1 year ago
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 @sampila, any update on this?
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
Description
I cannot work out how to update a Table placeholder with a table generated by
slide.AddTable
- Can you please advise?