MCPcopy
hub / github.com/qax-os/excelize / AddVBAProject

Method AddVBAProject

excelize.go:553–587  ·  view source on GitHub ↗

AddVBAProject provides the method to add vbaProject.bin file which contains functions and/or macros. The file extension should be XLSM or XLTM. For example: codeName := "Sheet1" if err := f.SetSheetProps("Sheet1", &excelize.SheetPropsOptions{ CodeName: &codeName, }); err != nil { fmt.P

(file []byte)

Source from the content-addressed store, hash-verified

551// return
552// }
553func (f *File) AddVBAProject(file []byte) error {
554 var err error
555 // Check vbaProject.bin exists first.
556 if !bytes.Contains(file, oleIdentifier) {
557 return ErrAddVBAProject
558 }
559 rels, err := f.relsReader(f.getWorkbookRelsPath())
560 if err != nil {
561 return err
562 }
563 rels.mu.Lock()
564 defer rels.mu.Unlock()
565 var rID int
566 var ok bool
567 for _, rel := range rels.Relationships {
568 if rel.Target == "vbaProject.bin" && rel.Type == SourceRelationshipVBAProject {
569 ok = true
570 continue
571 }
572 t, _ := strconv.Atoi(strings.TrimPrefix(rel.ID, "rId"))
573 if t > rID {
574 rID = t
575 }
576 }
577 rID++
578 if !ok {
579 rels.Relationships = append(rels.Relationships, xlsxRelationship{
580 ID: "rId" + strconv.Itoa(rID),
581 Target: "vbaProject.bin",
582 Type: SourceRelationshipVBAProject,
583 })
584 }
585 f.Pkg.Store("xl/vbaProject.bin", file)
586 return err
587}
588
589// setContentTypePartProjectExtensions provides a function to set the content
590// type for relationship parts and the main document part.

Callers 3

TestFormControlFunction · 0.95
TestAddVBAProjectFunction · 0.95
TestSlicerFunction · 0.95

Calls 2

relsReaderMethod · 0.95
getWorkbookRelsPathMethod · 0.95

Tested by 3

TestFormControlFunction · 0.76
TestAddVBAProjectFunction · 0.76
TestSlicerFunction · 0.76