Files
AI-Writie-Assistant/internal/parser/excel_parser.go
T
2026-04-07 17:35:09 +08:00

63 lines
1.1 KiB
Go

package parser
import (
"fmt"
"strings"
"github.com/xuri/excelize/v2"
)
// ExcelParser extracts all sheets from Excel files as Markdown tables.
type ExcelParser struct{}
func (p *ExcelParser) SupportedExtensions() []string {
return []string{".xlsx", ".xls"}
}
func (p *ExcelParser) ParseToMarkdown(path string) (string, error) {
f, err := excelize.OpenFile(path)
if err != nil {
return "", fmt.Errorf("open excel: %w", err)
}
defer f.Close()
var sb strings.Builder
for _, sheet := range f.GetSheetList() {
rows, err := f.GetRows(sheet)
if err != nil {
continue
}
if len(rows) == 0 {
continue
}
sb.WriteString(fmt.Sprintf("## Sheet: %s\n\n", sheet))
// Header row
sb.WriteString("| ")
for _, cell := range rows[0] {
sb.WriteString(cell + " | ")
}
sb.WriteString("\n|")
for range rows[0] {
sb.WriteString(" --- |")
}
sb.WriteString("\n")
// Data rows
for _, row := range rows[1:] {
sb.WriteString("| ")
for i := 0; i < len(rows[0]); i++ {
if i < len(row) {
sb.WriteString(row[i])
}
sb.WriteString(" | ")
}
sb.WriteString("\n")
}
sb.WriteString("\n")
}
return sb.String(), nil
}