Excel出力後の条件付き書式設定が出力前と異なる
対象製品
SpreadJS 9J
状況
修正済み
詳細
条件付き書式の適用範囲について、その範囲の開始行インデックスと列インデックスが値が異なる場合に本現象が発生します。例として条件付き書式の適用範囲がRange(8,6,2,2)、条件付き書式内容が"RC<0"の場合、Excel出力される条件付き書式が"R[-2]C[2]<0"等になります。
【再現手順】
--------------------------------------------------
1. 下記のサンプルを実行します。
2. ページ上に表示されたボタンを押下します。
- SpreadJSに設定した条件付き書式内容とExcelに出力された条件付き書式内容が異なります。
--------------------------------------------------
【再現コード】
--------------------------------------------------
$(function () {
var spread, sheet;
spread = $(".spread").wijspread({
sheetCount: 1
}).wijspread("spread");
spread.referenceStyle($.wijmo.wijspread.ReferenceStyle.R1C1);
spread.isPaintSuspended(true);
spread.useWijmoTheme = true;
sheet = spread.getActiveSheet();
sheet.setColumnCount(11);
sheet.setRowCount(11);
sheet.setArray(0, 0, [
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, -1, -3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, -1, -3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2]
]);
var style = new $.wijmo.wijspread.Style();
style.backColor = "#06f";
var rule = new $.wijmo.wijspread.FormulaRule("=RC<0", style);
rule.ranges = [new $.wijmo.wijspread.Range(8, 6, 2, 2)];
sheet.getConditionalFormats().addRule(rule);
spread.isPaintSuspended(false);
$('button.export').on('click', function () {
exportSpread(spread.toJSON());
});
var $lastIframe;
function exportSpread(spreadJSON) {
if ($lastIframe) {
$lastIframe.remove();
$lastIframe = null;
}
var serverUrl = $('input[name="url"]').val();
var optContentType = "application/json";
var dataObj = {
"spread": spreadJSON,
"exportFileType": "xlsx",
"excel": {
"saveFlags": "NoFlagsSet",
"password": ""
}
};
var content = JSON.stringify(dataObj);
var formInnerHtml = null;
formInnerHtml = '';
formInnerHtml += '';
var $win = $lastIframe = $(
"")
.appendTo("body");
$win.ready(function () {
var formDoc = null;
formDoc = _getiframeDocument($win);
formDoc.write("
"
+ formInnerHtml
+ "
dummy windows for postback");
var $form = $(formDoc).find('form');
$form.submit();
});
}
function _getiframeDocument($iframe){
var iframeDoc = $iframe[0].contentWindow
|| $iframe[0].contentDocument;
if (iframeDoc.document) {
iframeDoc = iframeDoc.document;
}
return iframeDoc;
}
var _htmlSpecialCharsRegEx = /[<>&¥r¥n"']/gm;
var _htmlSpecialCharsPlaceHolders = {
'<' : 'lt;',
'>' : 'gt;',
'&' : 'amp;',
'¥r' : "#13;",
'¥n' : "#10;",
'"' : 'quot;',
"'" : 'apos;' /*single quotes just to be safe*/
};
function _htmlSpecialCharsEntityEncode(str) {
return str.replace(_htmlSpecialCharsRegEx, function(match){
return '&' + _htmlSpecialCharsPlaceHolders[match];
});
}
});
※
上記のサンプルコード実行には、HTMLページ上にButton、SpreadJSが必要です。また実行環境にExcelIOサービスがインストールされている必要があります。
--------------------------------------------------
【再現手順】
--------------------------------------------------
1. 下記のサンプルを実行します。
2. ページ上に表示されたボタンを押下します。
- SpreadJSに設定した条件付き書式内容とExcelに出力された条件付き書式内容が異なります。
--------------------------------------------------
【再現コード】
--------------------------------------------------
$(function () {
var spread, sheet;
spread = $(".spread").wijspread({
sheetCount: 1
}).wijspread("spread");
spread.referenceStyle($.wijmo.wijspread.ReferenceStyle.R1C1);
spread.isPaintSuspended(true);
spread.useWijmoTheme = true;
sheet = spread.getActiveSheet();
sheet.setColumnCount(11);
sheet.setRowCount(11);
sheet.setArray(0, 0, [
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, -1, -3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, -1, -3, 4, 5, 2],
[2, 1, 3, 4, 5, 2, 1, 3, 4, 5, 2]
]);
var style = new $.wijmo.wijspread.Style();
style.backColor = "#06f";
var rule = new $.wijmo.wijspread.FormulaRule("=RC<0", style);
rule.ranges = [new $.wijmo.wijspread.Range(8, 6, 2, 2)];
sheet.getConditionalFormats().addRule(rule);
spread.isPaintSuspended(false);
$('button.export').on('click', function () {
exportSpread(spread.toJSON());
});
var $lastIframe;
function exportSpread(spreadJSON) {
if ($lastIframe) {
$lastIframe.remove();
$lastIframe = null;
}
var serverUrl = $('input[name="url"]').val();
var optContentType = "application/json";
var dataObj = {
"spread": spreadJSON,
"exportFileType": "xlsx",
"excel": {
"saveFlags": "NoFlagsSet",
"password": ""
}
};
var content = JSON.stringify(dataObj);
var formInnerHtml = null;
formInnerHtml = '';
formInnerHtml += '';
var $win = $lastIframe = $(
"")
.appendTo("body");
$win.ready(function () {
var formDoc = null;
formDoc = _getiframeDocument($win);
formDoc.write("
"
+ formInnerHtml
+ "
dummy windows for postback");
var $form = $(formDoc).find('form');
$form.submit();
});
}
function _getiframeDocument($iframe){
var iframeDoc = $iframe[0].contentWindow
|| $iframe[0].contentDocument;
if (iframeDoc.document) {
iframeDoc = iframeDoc.document;
}
return iframeDoc;
}
var _htmlSpecialCharsRegEx = /[<>&¥r¥n"']/gm;
var _htmlSpecialCharsPlaceHolders = {
'<' : 'lt;',
'>' : 'gt;',
'&' : 'amp;',
'¥r' : "#13;",
'¥n' : "#10;",
'"' : 'quot;',
"'" : 'apos;' /*single quotes just to be safe*/
};
function _htmlSpecialCharsEntityEncode(str) {
return str.replace(_htmlSpecialCharsRegEx, function(match){
return '&' + _htmlSpecialCharsPlaceHolders[match];
});
}
});
※
上記のサンプルコード実行には、HTMLページ上にButton、SpreadJSが必要です。また実行環境にExcelIOサービスがインストールされている必要があります。
--------------------------------------------------
回避方法
SpreadJS 9J SP1(Ver.3.20152.21)で修正済み