单元格内容显示模式

SpreadJS 提供了多种单元格内容显示模式,当单元格内容超过列宽时,用户可以选择掩码模式(显示 ###)、溢出模式(延伸到相邻单元格)、自动缩小字体或显示省略号。这些功能帮助用户在有限空间内更好地展示数据,提升表格的可读性和美观性。

概述 本 Demo 展示了 SpreadJS 中单元格内容的多种显示模式,包括数字自适应模式、自动缩小字体、显示省略号和文本缩进。用户可以通过交互按钮切换不同的显示模式,体验各种显示效果。 实现思路 初始化工作簿并设置测试数据,包括日期、数字和长文本 设置较窄的列宽(35 像素),使内容无法完全显示 为「掩码」和「溢出」按钮绑定事件,切换 numbersFitMode 模式 为「自动缩小」、「显示省略号」和「缩进」按钮绑定事件,设置单元格样式属性 每次点击按钮时,获取当前活动单元格并应用相应的样式 代码解析 设置数字自适应模式 这段代码通过设置 spread.options.numbersFitMode 属性来切换数字和日期的显示模式。numbersFitMode 为 0 时使用掩码模式,为 1 时使用溢出模式。 设置自动缩小字体 这段代码获取当前活动单元格,并通过 shrinkToFit() 方法切换自动缩小字体的状态。当设置为 true 时,单元格文本会自动缩小以适应列宽。 设置显示省略号 这段代码通过 showEllipsis() 方法控制是否在文本超出单元格边界时显示省略号。设置后会关闭自动缩小功能,避免样式冲突。 设置文本缩进 这段代码通过 textIndent() 方法增加文本缩进值,每个增量代表 8 像素的缩进距离。 运行效果 点击「掩码」按钮:D 列的日期和 F 列的数字会显示为 ### 点击「溢出」按钮:日期和数字会延伸到右侧相邻单元格显示完整内容 选中 J 列的长文本单元格,点击「自动缩小」按钮:文本会自动缩小字体以适应列宽 选中单元格后点击「显示省略号」按钮:超出部分会显示省略号(…) 点击「增加文本缩进」或「减少文本缩进」按钮:文本会向右或向左移动 API 参考 numbersFitMode 工作簿级别的选项,控制数字和日期的自适应显示模式。 值为 0:掩码模式,当列宽不足时显示 ### 值为 1:溢出模式,允许内容延伸到相邻单元格 shrinkToFit() 单元格方法,控制是否自动缩小字体以适应单元格大小。 参数:value?: boolean 返回值:any showEllipsis() 单元格方法,控制文本超出边界时是否显示省略号。 参数:value?: boolean 返回值:any 注意:显示省略号的优先级高于溢出文本 textIndent() 单元格方法,获取或设置文本缩进。 参数:value?: number(每个增量代表 8 像素) 返回值:any
window.onload = function() { var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 1 }); var sheet = spread.getActiveSheet(); spread.suspendPaint(); initData(); spread.resumePaint(); document.getElementById("mask").addEventListener("click", function(){ spread.options.numbersFitMode = 0; }); document.getElementById("overflow").addEventListener("click", function(){ spread.options.numbersFitMode = 1; }); document.getElementById("shrink").addEventListener("click", function(){ var row = sheet.getActiveRowIndex(); var col = sheet.getActiveColumnIndex(); sheet.getCell(row, col, ).wordWrap(false); if (!sheet.getActualStyle(row, col).shrinkToFit) { sheet.getCell(row, col).shrinkToFit(true); } else { sheet.getCell(row, col).shrinkToFit(false); } }); document.getElementById("showEllipsis").addEventListener("click", function(){ var row = sheet.getActiveRowIndex(); var col = sheet.getActiveColumnIndex(); sheet.getCell(row, col, ).wordWrap(false); sheet.getCell(row, col).shrinkToFit(false); if (!sheet.getActualStyle(row, col).showEllipsis) { sheet.getCell(row, col).showEllipsis(true); } else { sheet.getCell(row, col).showEllipsis(false); } }); document.getElementById("indentIncrease").addEventListener("click", function(){ var row = sheet.getActiveRowIndex(); var col = sheet.getActiveColumnIndex(); sheet.getCell(row, col).textIndent((sheet.getCell(row, col).textIndent() || 0) + 1); }); document.getElementById("indentDecrease").addEventListener("click", function(){ var row = sheet.getActiveRowIndex(); var col = sheet.getActiveColumnIndex(); sheet.getCell(row, col).textIndent((sheet.getCell(row, col).textIndent() || 0) - 1); }); function initData() { var align = ["Left","Middle","Right","General"]; sheet.getRange(5, 5, 4, 1).formatter("mm-dd-yyyy"); for(var i=0; i<4; i++) { sheet.setValue(i+1, 1, align[i]); sheet.setValue(i+1, 3, new Date(2011, 10, 11)); sheet.setValue((i+1), 5, 123456.789654); sheet.setValue(i+1, 9, "This is a very very long text."); sheet.getRange(i+1, 1, 1, 9).hAlign(i); } sheet.setColumnWidth(3, 35, 3); sheet.setColumnWidth(5, 35, 3); } };
<!doctype html> <html style="height:100%;font-size:14px;"> <head> <meta charset="utf-8" /> <meta name="spreadjs culture" content="zh-cn" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" type="text/css" href="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script> <script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script> <script src="$DEMOROOT$/zh/purejs/node_modules/@grapecity-software/spread-sheets-resources-zh/dist/gc.spread.sheets.resources.zh.min.js" type="text/javascript"></script> <script src="app.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="styles.css"> </head> <body> <div class="sample-tutorial"> <div class="sample-container"> <div id="ss" class="sample-spreadsheets"></div> </div> <div class="options-container"> <label><b>更改数字和日期单元格的显示方式(D列和G列)</b></label> <hr /> <div class="options-row"> <input id="mask" type="button" value="掩码" /> </div> <label>掩码模式会在列宽无法显示完整值时将值显示为掩码 (#)</label> <div class="options-row"> <input id="overflow" type="button" value="溢出" /> </div> <label>溢出模式会允许值溢出到相邻单元格以显示完整值</label> <br /> <label><b>选择一个单元格文本(B列和J列),点击以下按钮查看显示效果的变化</b></label> <hr /> <div class="options-row"> <input id="shrink" type="button" value="自动缩小" /> </div> <div class="options-row"> <input id="showEllipsis" type="button" value="显示省略号" /> </div> <div class="options-row"> <input id="indentIncrease" type="button" value="增加文本缩进" /> </div> <div class="options-row"> <input id="indentDecrease" type="button" value="减少文本缩进" /> </div> </div> </div> </body> </html>
* { -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } .sample-options { float: right; height: 100%; } .options-toggle { display: none; } @media only screen and (max-width: 768px) { .options-toggle { display: block !important; top: 20px; left: -30px; width: 30px; height: 30px; position: absolute; background-color: #86bd00; line-height: 30px; text-align: center; padding: 4px; box-sizing: border-box; color: #fff; } .options-container { width: 280px !important; overflow: auto; height: 100%; padding: 22px; box-sizing: border-box; } .sample-container { width: 100% !important; height: 100%; overflow: hidden; float: left; } .sample-options { right: 0; padding: 0 !important; overflow: visible !important; position: absolute; box-shadow: 0 0 3px 0 rgba(0, 0, 0, .25); transition: right .25s ease-in-out; z-index: 1000; } .sample-options.hidden { right: -280px; } #statusBar { bottom: 0; height: 25px; width: 100%; position: relative; float: left; } } .sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-container { width: calc(100% - 280px); height: 100%; float: left; } .sample-spreadsheets { width: 100%; height: calc(100% - 25px); overflow: hidden; } #statusBar { bottom: 0; height: 25px; width: 100%; position: relative; } .options-container { float: right; width: 280px; padding: 12px; height: 100%; box-sizing: border-box; background: #fbfbfb; overflow: auto; } .option-row { font-size: 14px; padding: 5px; margin-top: 10px; } label { display: block; margin-bottom: 6px; } input { padding: 4px 6px; box-sizing: border-box; width: 100%; } input[type=button] { margin-top: 6px; display: block; } .summary { background-color: #e6e6fa; padding: 3px; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }