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 }