出力したファイルを印刷すると罫線の一部が適切に表示されない場合がある
対象製品
SpreadJS 9J
状況
修正済み
詳細
SpreadJS上で上下左右に罫線を設定した表を作成しエクスポートすると、Excelでの印刷において罫線が正しく印刷されない現象が発生します。
【現象再現手順】
--------------------------------------------------
1. 以下の再現コードを実行します
2. ”export”ボタンを押下してExcelファイルエクスポートを実行します
3. エクスポートしたファイルをMicrosoft Excelで開き、印刷します
-印刷結果中の罫線が消失する現象が発生します
--------------------------------------------------
【現象再現コード】
--------------------------------------------------
----------------------------
HTMLファイル
----------------------------
<!DOCTYPE html>
<html>
<head>
<title>The Sample</title>
<meta charset="utf-8" />
<meta name="spreadjs culture" content="ja-jp" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript"></script>
<link href="http://cdn.grapecity.com/spreadjs/32015219/css/spread.3.20152.19.css" rel="stylesheet" type="text/css" />
<script src="http://cdn.grapecity.com/spreadjs/32015219/scripts/spread.all.3.20152.19.min.js" type="text/javascript"></script>
<script src="./TheSample.js" type="text/javascript"></script>
</head>
<body>
<h2>SpreadJS Sample</h2>
<div id="ss" style="width: 800px; height: 600px; border: 1px solid gray; float: left"></div>
<div style="width: 100px; height: 70px;">
<input id="Export" type="button" value="Export" />
</div>
</body>
</html>
----------------------------
JSファイル
----------------------------
$(function () {
$(document).ready(function () {
$("#ss").wijspread({ sheetCount: 1 });
var spread = $("#ss").wijspread("spread");
var activeSheet = spread.getActiveSheet();
var headerColCnt = 1;
var headerRowCnt = 3;
var listRowCnt = 75;
var listColCnt = 17;
var area1TitleRow = 0;
var area1HeaderRowCnt = 2;
var area1DataStartRow = 3;
var area1DataRowCnt = 13;
var area2TitleRow = 18;
var area2HeaderRowCnt = 0;
var area2DataStartRow = 19;
var area2DataRowCnt = 4;
var area3TitleRow = 24;
var area3HeaderRowCnt = 1;
var area3DataStartRow = 27;
var area3DataRowCnt = 48;
activeSheet.setGridlineOptions({ color: "white" });
var listRangeArea1 = new $.wijmo.wijspread.Range(area1DataStartRow - 1, 0, area1DataRowCnt + 1, listColCnt);
activeSheet.setBorder(listRangeArea1, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { all: true }, 3);
var listRangeArea2 = new $.wijmo.wijspread.Range(area2DataStartRow, 0, area2DataRowCnt, listColCnt);
activeSheet.setBorder(listRangeArea2, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { all: true }, 3);
var listRangeArea3 = new $.wijmo.wijspread.Range(area3DataStartRow - area3HeaderRowCnt, 0, area3DataRowCnt + area3HeaderRowCnt, listColCnt);
activeSheet.setBorder(listRangeArea3, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { all: true }, 3);
var bottomLineArea2 = new $.wijmo.wijspread.Range(listRowCnt, 0, 1, listColCnt - 1);
activeSheet.setBorder(bottomLineArea2, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { top: true }, 3);
var leftLineArea1 = new $.wijmo.wijspread.Range(area1HeaderRowCnt, listColCnt, area1DataRowCnt + 1, 1);
activeSheet.setBorder(leftLineArea1, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { left: true }, 3);
var leftLineArea2 = new $.wijmo.wijspread.Range(area2DataStartRow, listColCnt, area2DataRowCnt, 1);
activeSheet.setBorder(leftLineArea2, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { left: true }, 3);
var leftLineArea3 = new $.wijmo.wijspread.Range(area3DataStartRow - area3HeaderRowCnt, listColCnt, area3DataRowCnt + area3HeaderRowCnt, 1);
activeSheet.setBorder(leftLineArea3, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { left: true }, 3);
});
$("#Export").click(function () {
//エクスポート処理
expFile();
});
function expFile() {
var spread = $("#ss").wijspread("spread");
// SpreadJS Excel IOインポートサービスAPI
var serverUrl = "http://localhost/ExcelIO" + "/xsapi/export";
// インポートAPIオプションを生成します。
var optContentType = "application/json";
// SpreadJSからJSONをポストします。
var dataObj = {
"spread": spread.toJSON(),
"exportFileType": "xlsx",
"excel": {
"saveFlags": "NoFlagsSet",
"password": ""
}
};
var content = JSON.stringify(dataObj);
var formInnerHtml = '<input type="hidden" name="type" value="' + htmlSpecialCharsEntityEncode(optContentType) + '" />';
formInnerHtml += '<input type="hidden" name="data" value="' + htmlSpecialCharsEntityEncode(content) + '" />';
var $iframe = $("<iframe style='display: none' src='about:blank'></iframe>").appendTo("body");
$iframe.ready(function () {
var formDoc = getiframeDocument($iframe);
formDoc.write("<html><head></head><body><form method='Post' action='" + serverUrl + "'>" + formInnerHtml + "</form>dummy windows for postback</body></html>");
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];
});
}
});
--------------------------------------------------
【現象再現手順】
--------------------------------------------------
1. 以下の再現コードを実行します
2. ”export”ボタンを押下してExcelファイルエクスポートを実行します
3. エクスポートしたファイルをMicrosoft Excelで開き、印刷します
-印刷結果中の罫線が消失する現象が発生します
--------------------------------------------------
【現象再現コード】
--------------------------------------------------
----------------------------
HTMLファイル
----------------------------
<!DOCTYPE html>
<html>
<head>
<title>The Sample</title>
<meta charset="utf-8" />
<meta name="spreadjs culture" content="ja-jp" />
<script src="http://code.jquery.com/jquery-1.9.1.min.js" type="text/javascript"></script>
<link href="http://cdn.grapecity.com/spreadjs/32015219/css/spread.3.20152.19.css" rel="stylesheet" type="text/css" />
<script src="http://cdn.grapecity.com/spreadjs/32015219/scripts/spread.all.3.20152.19.min.js" type="text/javascript"></script>
<script src="./TheSample.js" type="text/javascript"></script>
</head>
<body>
<h2>SpreadJS Sample</h2>
<div id="ss" style="width: 800px; height: 600px; border: 1px solid gray; float: left"></div>
<div style="width: 100px; height: 70px;">
<input id="Export" type="button" value="Export" />
</div>
</body>
</html>
----------------------------
JSファイル
----------------------------
$(function () {
$(document).ready(function () {
$("#ss").wijspread({ sheetCount: 1 });
var spread = $("#ss").wijspread("spread");
var activeSheet = spread.getActiveSheet();
var headerColCnt = 1;
var headerRowCnt = 3;
var listRowCnt = 75;
var listColCnt = 17;
var area1TitleRow = 0;
var area1HeaderRowCnt = 2;
var area1DataStartRow = 3;
var area1DataRowCnt = 13;
var area2TitleRow = 18;
var area2HeaderRowCnt = 0;
var area2DataStartRow = 19;
var area2DataRowCnt = 4;
var area3TitleRow = 24;
var area3HeaderRowCnt = 1;
var area3DataStartRow = 27;
var area3DataRowCnt = 48;
activeSheet.setGridlineOptions({ color: "white" });
var listRangeArea1 = new $.wijmo.wijspread.Range(area1DataStartRow - 1, 0, area1DataRowCnt + 1, listColCnt);
activeSheet.setBorder(listRangeArea1, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { all: true }, 3);
var listRangeArea2 = new $.wijmo.wijspread.Range(area2DataStartRow, 0, area2DataRowCnt, listColCnt);
activeSheet.setBorder(listRangeArea2, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { all: true }, 3);
var listRangeArea3 = new $.wijmo.wijspread.Range(area3DataStartRow - area3HeaderRowCnt, 0, area3DataRowCnt + area3HeaderRowCnt, listColCnt);
activeSheet.setBorder(listRangeArea3, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { all: true }, 3);
var bottomLineArea2 = new $.wijmo.wijspread.Range(listRowCnt, 0, 1, listColCnt - 1);
activeSheet.setBorder(bottomLineArea2, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { top: true }, 3);
var leftLineArea1 = new $.wijmo.wijspread.Range(area1HeaderRowCnt, listColCnt, area1DataRowCnt + 1, 1);
activeSheet.setBorder(leftLineArea1, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { left: true }, 3);
var leftLineArea2 = new $.wijmo.wijspread.Range(area2DataStartRow, listColCnt, area2DataRowCnt, 1);
activeSheet.setBorder(leftLineArea2, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { left: true }, 3);
var leftLineArea3 = new $.wijmo.wijspread.Range(area3DataStartRow - area3HeaderRowCnt, listColCnt, area3DataRowCnt + area3HeaderRowCnt, 1);
activeSheet.setBorder(leftLineArea3, new $.wijmo.wijspread.LineBorder('Black', $.wijmo.wijspread.LineStyle.thin), { left: true }, 3);
});
$("#Export").click(function () {
//エクスポート処理
expFile();
});
function expFile() {
var spread = $("#ss").wijspread("spread");
// SpreadJS Excel IOインポートサービスAPI
var serverUrl = "http://localhost/ExcelIO" + "/xsapi/export";
// インポートAPIオプションを生成します。
var optContentType = "application/json";
// SpreadJSからJSONをポストします。
var dataObj = {
"spread": spread.toJSON(),
"exportFileType": "xlsx",
"excel": {
"saveFlags": "NoFlagsSet",
"password": ""
}
};
var content = JSON.stringify(dataObj);
var formInnerHtml = '<input type="hidden" name="type" value="' + htmlSpecialCharsEntityEncode(optContentType) + '" />';
formInnerHtml += '<input type="hidden" name="data" value="' + htmlSpecialCharsEntityEncode(content) + '" />';
var $iframe = $("<iframe style='display: none' src='about:blank'></iframe>").appendTo("body");
$iframe.ready(function () {
var formDoc = getiframeDocument($iframe);
formDoc.write("<html><head></head><body><form method='Post' action='" + serverUrl + "'>" + formInnerHtml + "</form>dummy windows for postback</body></html>");
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];
});
}
});
--------------------------------------------------
回避方法
SpreadJS 9J SP1(Ver.3.20152.21)で修正済み
SpreadJS 9J SP1(Ver.3.20152.21)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下の手順でExcel上から印刷設定を変更します。
【回避手順】
1.エクスポートしたファイルをExcelで開きます
2.Excel上で[ページ設定]-[シート]-[枠線]のチェックを外します
3.印刷を実行します
SpreadJS 9J SP1(Ver.3.20152.21)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下の手順でExcel上から印刷設定を変更します。
【回避手順】
1.エクスポートしたファイルをExcelで開きます
2.Excel上で[ページ設定]-[シート]-[枠線]のチェックを外します
3.印刷を実行します