# jsxlsb
**Repository Path**: itcraft-cn/jsxlsb
## Basic Information
- **Project Name**: jsxlsb
- **Description**: A pure JavaScript library for reading and writing XLSB (Excel Binary Workbook) files.
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-23
- **Last Updated**: 2026-04-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: 电子表格, 办公, Excel, wps
## README
# jsxlsb
**中文** | [English Documentation](README.md)
纯 JavaScript 实现的 XLSB (Excel Binary Workbook) 格式读写库。
## 特性
- **纯 JavaScript** - 无外部依赖(pako 打包用于 ZIP 压缩)
- **高性能** - 基于 BIFF12 二进制格式,文件更小、读写更快
- **跨平台** - 同时支持 Node.js 和浏览器环境
- **完整功能** - 支持读写、渲染展示
- **高 DPI 支持** - Canvas 渲染支持 Retina 显示屏
- **自动列宽** - 根据内容自动计算列宽
## 安装
```bash
npm install jsxlsb
```
或从源码构建:
```bash
git clone https://github.com/itcraft-cn/jsxlsb.git
cd jsxlsb
npm install
npm run build
```
## 快速开始
### Node.js - 读取
```javascript
const { XlsbReader } = require('jsxlsb');
const reader = XlsbReader.builder().path('./data.xlsb').build();
// 获取 Sheet 信息
const sheets = reader.getSheetInfos();
console.log('工作表:', sheets);
// 流式读取
reader.forEachRow(0, {
onRowStart(row, colCount) { console.log(`行 ${row} 开始`); },
onCell(row, col, cell) {
console.log(` ${row},${col}: ${cell.value}, 格式: ${cell.formatCode}`);
},
onRowEnd(row) { console.log(`行 ${row} 结束`); }
});
// 分页读取
const batch = reader.readRows(0, 100, 1000); // 从100行开始,读取1000行
reader.close();
```
### Node.js - 写入
```javascript
const { XlsbWriter, CellData } = require('jsxlsb');
const writer = XlsbWriter.builder().path('./output.xlsb').build();
const data = [
[CellData.text('姓名'), CellData.text('年龄'), CellData.text('工资')],
[CellData.text('张三'), CellData.number(25), CellData.currency(5000)],
[CellData.text('李四'), CellData.number(30), CellData.percentage(0.15)],
];
writer.writeBatch('员工表', data);
writer.close();
console.log('XLSB 文件创建成功: output.xlsb');
```
### 浏览器 - 渲染
```html
```
## API 参考
### CellData
```javascript
CellData.text('文本') // 文本单元格
CellData.number(123.45) // 数值单元格
CellData.number(value, formatCode) // 带格式的数值
CellData.date(timestamp) // 日期单元格(Excel 日期格式)
CellData.bool(true) // 布尔单元格
CellData.blank() // 空白单元格
// 内置格式
CellData.percentage(0.15) // 15.00%
CellData.percentage(0.15, 3) // 15.000%
CellData.numberWithComma(1234567) // 1,234,567.00
CellData.numberNegativeRed(-500) // -500.00(红色)
CellData.currency(5000) // ¥5,000.00
CellData.currency(5000, '$') // $5,000.00
CellData.time(timestamp) // h:mm:ss
```
### XlsbReader
```javascript
// Node.js
const reader = XlsbReader.builder().path('./data.xlsb').build();
const reader = XlsbReader.builder().buffer(uint8Array).build();
// 浏览器
const reader = await XlsbReader.fromFile(file);
// 方法
reader.getSheetInfos(); // 返回工作表信息数组
reader.forEachRow(sheetIndex, handler); // 流式读取
reader.readRows(sheetIndex, startRow, batchSize); // 分页读取
reader.getStyles(); // 返回 StylesReader
reader.close();
```
### XlsbWriter
```javascript
const writer = XlsbWriter.builder().path('./output.xlsb').build();
const writer = XlsbWriter.builder().buffer().build(); // 返回 Uint8Array
writer.writeBatch(sheetName, data); // 写入整个工作表
writer.startSheet(sheetName, columnCount); // 开始流式写入
writer.writeRows(data); //追加行
writer.endSheet(); // 结束工作表
writer.close(); // 完成并返回 Uint8Array(如果是 buffer 模式)
```
### HtmlRenderer
```javascript
const renderer = new HtmlRenderer(config);
const table = renderer.render(reader, sheetIndex, {
maxRows: 500,
maxColumns: 20,
theme: 'light', // 'light' 或 'dark'
stickyHeader: true,
showHeader: true,
cellWidth: 100
});
renderer.renderTo(container, reader, sheetIndex, config); // 直接添加到 DOM
```
### CanvasRenderer
```javascript
const renderer = new CanvasRenderer(config);
renderer.render(canvas, reader, sheetIndex, {
cellHeight: 24,
fontFamily: 'Arial',
fontSize: 12,
maxRenderRows: 50,
maxRenderColumns: 20
});
renderer.setZoom(1.5); // 设置缩放级别(0.5 - 3)
renderer.scrollTo(row, col); // 滚动到指定位置
renderer.resize(width, height); // 调整 Canvas 尺寸
renderer.destroy(); // 清理资源
```
### 格式化工具
```javascript
const { formatCell, isDateFormat, excelDateToTimestamp } = require('jsxlsb');
// 格式化单元格值
const result = formatCell(-500, '#,##0.00;[Red]-#,##0.00');
// 返回: { text: '-500.00', color: 'red' }
// 检查是否为日期/时间格式
isDateFormat('m/d/yy h:mm'); // true
// 转换 Excel 日期为时间戳
excelDateToTimestamp(46131.401); // 返回 JavaScript 时间戳
```
## 格式支持
### 数字格式
| 格式代码 | 示例 |
|---------|------|
| `General` | 123.45 |
| `#,##0.00` | 1,234.56 |
| `#,##0.00;[Red]-#,##0.00` | -500.00(红色) |
| `¥#,##0.00` | ¥1,234.56 |
| `0.00%` | 15.00% |
### 日期/时间格式
| 格式代码 | 示例 |
|---------|------|
| `m/d/yy` | 4/20/26 |
| `m/d/yy h:mm` | 4/20/26 17:04 |
| `h:mm:ss` | 17:04:35 |
## 示例
参见 `examples/` 目录:
- `node-read.js` - Node.js 读取示例
- `node-write.js` - Node.js 写入示例
- `browser-canvas.html` - Canvas 渲染演示
- `browser-html.html` - HTML 渲染演示
- `browser-test.html` - 综合浏览器测试
## 构建
```bash
npm run build # 构建 UMD 包
npm run build:watch # 监听模式
npm run typecheck # 类型检查
```
## 许可证
Apache License 2.0
## 相关项目
- [jxlsb](https://github.com/itcraft-cn/jxlsb) - 本库的 Java 版本