{"id":20459745,"url":"https://github.com/rosbit/xlsx-generator","last_synced_at":"2026-04-20T07:03:46.108Z","repository":{"id":144249517,"uuid":"337657293","full_name":"rosbit/xlsx-generator","owner":"rosbit","description":"xlsx生成器，支持子列名，省去数列名称的烦恼","archived":false,"fork":false,"pushed_at":"2021-02-10T08:11:57.000Z","size":167,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-08T14:55:26.252Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rosbit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-10T08:11:01.000Z","updated_at":"2021-02-10T08:11:59.000Z","dependencies_parsed_at":"2023-05-29T06:00:08.022Z","dependency_job_id":null,"html_url":"https://github.com/rosbit/xlsx-generator","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rosbit/xlsx-generator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fxlsx-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fxlsx-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fxlsx-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fxlsx-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rosbit","download_url":"https://codeload.github.com/rosbit/xlsx-generator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosbit%2Fxlsx-generator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32036803,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T12:17:08.835Z","updated_at":"2026-04-20T07:03:46.088Z","avatar_url":"https://github.com/rosbit.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xlsx生成器\n\n 1. 通过接口实现xlsx输出与数据生成逻辑的分离\n 1. 强大的列名生成器，只需通过标题定位列，免去生成列名的困扰\n 1. 标题支持子标题，支持多Sheet\n 1. xlsx生成文件还是通过网络输出，使用场景自主决定\n 1. 通过提供adapter实现通用接口函数，减少实现代码\n\n## 接口定义\n\n```go\ntype XlsxGenerator interface {\n\t/// 在输出整个xlsx之前调用，在这里可以做一些输出准备工作\n\tBeforeOutputXlsx()\n\n\t/// 获取输出目标\n\tGetWriter() io.Writer\n\n\t/// 获取Book的sheet名称\n\tGetSheets() []string\n\n\t/// 获取某一个sheet的标题及子标题\n\tGetTitles(sheet string) []Title\n\n\t// 获取某个sheet所有的输出行channel\n\tGetRows(sheet string) (\u003c-chan map[string]interface{}) // 如果没有subtitle，key={title}; 其它key为{title}_{subtitle}\n}\n\n```\n\n## 例子\n\n```go\npackage main\n\nimport (\n\t\"github.com/rosbit/xlsx-generator\"\n\t\"os\"\n\t\"io\"\n\t\"fmt\"\n)\n\nfunc main() {\n\tfp, err := os.Create(\"a.xlsx\")\n\tif err != nil {\n\t\tfmt.Printf(\"failed to create a.xlsx: %v\\n\", err)\n\t\treturn\n\t}\n\tdefer fp.Close()\n\n\txg := \u0026xlsxTest{fp:fp}\n\ttoxlsx.GenerateXlsx(xg);\n}\n\n// ---- XlsxGenerator implementation ----\ntype xlsxTest struct {\n\ttoxlsx.DummyXlsxGeneratorAdapter\n\tfp *os.File\n}\n\nfunc (t *xlsxTest) GetWriter() io.Writer {\n\treturn t.fp\n}\n\nfunc (t *xlsxTest) GetSheets() []string {\n\treturn []string{\"Sheet1\", \"Sheet2\"}\n}\n\nfunc (a *xlsxTest) GetTitles(sheet string) []toxlsx.Title {\n\treturn []toxlsx.Title{\n\t\ttoxlsx.Title{\n\t\t\tName: \"a\",\n\t\t},\n\t\ttoxlsx.Title{\n\t\t\tName: \"b\",\n\t\t\tSubTitles: []string {\n\t\t\t\t\"b1\", \"b2\", \"b3\",\n\t\t\t},\n\t\t},\n\t\ttoxlsx.Title{\n\t\t\tName: \"c\",\n\t\t},\n\t}\n}\n\nfunc (a *xlsxTest) GetRows(sheet string) (\u003c-chan map[string]interface{}) {\n\trows := make(chan map[string]interface{})\n\tgo func() {\n\t\tfor i := 0; i \u003c 10; i++ {\n\t\t\tr := i+1\n\t\t\trow := make(map[string]interface{}, 5) // a, {b1,b2,b3}, c -\u003e 5\n\t\t\trow[\"a\"]    = fmt.Sprintf(\"a%d%d\", r, 1)\n\t\t\trow[\"b_b1\"] = fmt.Sprintf(\"b%d%d\", r, 2)\n\t\t\trow[\"b_b2\"] = fmt.Sprintf(\"b%d%d\", r, 3)\n\t\t\trow[\"b_b3\"] = fmt.Sprintf(\"b%d%d\", r, 4)\n\t\t\trow[\"c\"]    = fmt.Sprintf(\"c%d%d\", r, 5)\n\n\t\t\trows \u003c- row\n\t\t}\n\n\t\tclose(rows)\n\t}()\n\n\treturn rows\n}\n```\n\n## 运行结果\n\n生成a.xlsx，内容如图\n\n![运行结果](a.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frosbit%2Fxlsx-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frosbit%2Fxlsx-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frosbit%2Fxlsx-generator/lists"}