init: initial commit
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user