Javascript로 뒤로가기 막기
(히스토리를 이용해서 막기)
history.pushState(null, null, location.href);
window.onpopstate = function () {
history.go(1);
};
Javascript로 뒤로가기 막기
(히스토리를 이용해서 막기)
history.pushState(null, null, location.href);
window.onpopstate = function () {
history.go(1);
};
[JS로 엑셀 파일 쓰기]
https://github.com/kkaok/examples/blob/master/jsExcelExample/src/main/resources/static/html/sheetjs-create-xlsx-aoa.html
https://github.com/kkaok/examples/blob/master/jsExcelExample/src/main/resources/static/html/sheetjs-create-xlsx-json.html
https://github.com/kkaok/examples/blob/master/jsExcelExample/src/main/resources/static/html/sheetjs-create-xlsx-table.html
https://github.com/kkaok/examples/blob/master/jsExcelExample/src/main/resources/static/html/sheetjs-create-xlsx.html
[소스]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>sheetjs create xlsx excel example(json)</title>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.14.3/xlsx.full.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js"></script>
<script>
//공통
// 참고 출처 : https://redstapler.co/sheetjs-tutorial-create-xlsx/
function s2ab(s) {
var buf = new ArrayBuffer(s.length); //convert s to arrayBuffer
var view = new Uint8Array(buf); //create uint8array as viewer
for (var i=0; i<s.length; i++) view[i] = s.charCodeAt(i) & 0xFF; //convert to octet
return buf;
}
function exportExcel(){
// step 1. workbook 생성
var wb = XLSX.utils.book_new();
// step 2. 시트 만들기
var newWorksheet = excelHandler.getWorksheet();
// step 3. workbook에 새로만든 워크시트에 이름을 주고 붙인다.
XLSX.utils.book_append_sheet(wb, newWorksheet, excelHandler.getSheetName());
// step 4. 엑셀 파일 만들기
var wbout = XLSX.write(wb, {bookType:'xlsx', type: 'binary'});
// step 5. 엑셀 파일 내보내기
saveAs(new Blob([s2ab(wbout)],{type:"application/octet-stream"}), excelHandler.getExcelFileName());
}
$(document).ready(function() {
$("#excelFileExport").click(function(){
exportExcel();
});
});
</script>
<script>
var excelHandler = {
getExcelFileName : function(){
return 'json-test.xlsx';
},
getSheetName : function(){
return 'Json Test Sheet';
},
getExcelData : function(){
return [{'상품명':'삼성 갤럭시 s11' , '가격':'200000'}, {'상품명':'삼성 갤럭시 s12' , '가격':'220000'}, {'상품명':'삼성 갤럭시 s13' , '가격':'230000'}];
},
getWorksheet : function(){
return XLSX.utils.json_to_sheet(this.getExcelData());
}
}
</script>
</head>
<body>
파일 내보내기(JSON) : <input type="button" id="excelFileExport" value="엑셀 파일 다운로드(JSON)" />
</body>
</html>
[JS로 엑셀 파일 읽기]
https://github.com/kkaok/examples/blob/master/jsExcelExample/src/main/resources/static/html/js-excel-example01.html
https://github.com/kkaok/examples/blob/master/jsExcelExample/src/main/resources/static/html/js-excel-example02.html
https://github.com/kkaok/examples/blob/master/jsExcelExample/src/main/resources/static/html/js-excel-example03.html
[소스]
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>js excel example 03</title>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.14.3/xlsx.full.min.js"></script>
<script>
function excelExport(event){
excelExportCommon(event, handleExcelDataAll);
}
function excelExportCommon(event, callback){
var input = event.target;
var reader = new FileReader();
reader.onload = function(){
var fileData = reader.result;
var wb = XLSX.read(fileData, {type : 'binary'});
var sheetNameList = wb.SheetNames; // 시트 이름 목록 가져오기
var firstSheetName = sheetNameList[0]; // 첫번째 시트명
var firstSheet = wb.Sheets[firstSheetName]; // 첫번째 시트
callback(firstSheet);
};
reader.readAsBinaryString(input.files[0]);
}
function handleExcelDataAll(sheet){
handleExcelDataHeader(sheet); // header 정보
handleExcelDataJson(sheet); // json 형태
handleExcelDataCsv(sheet); // csv 형태
handleExcelDataHtml(sheet); // html 형태
}
function handleExcelDataHeader(sheet){
var headers = get_header_row(sheet);
$("#displayHeaders").html(JSON.stringify(headers));
}
function handleExcelDataJson(sheet){
$("#displayExcelJson").html(JSON.stringify(XLSX.utils.sheet_to_json (sheet)));
}
function handleExcelDataCsv(sheet){
$("#displayExcelCsv").html(XLSX.utils.sheet_to_csv (sheet));
}
function handleExcelDataHtml(sheet){
$("#displayExcelHtml").html(XLSX.utils.sheet_to_html (sheet));
}
// 출처 : https://github.com/SheetJS/js-xlsx/issues/214
function get_header_row(sheet) {
var headers = [];
var range = XLSX.utils.decode_range(sheet['!ref']);
var C, R = range.s.r; /* start in the first row */
/* walk every column in the range */
for(C = range.s.c; C <= range.e.c; ++C) {
var cell = sheet[XLSX.utils.encode_cell({c:C, r:R})] /* find the cell in the first row */
var hdr = "UNKNOWN " + C; // <-- replace with your desired default
if(cell && cell.t) hdr = XLSX.utils.format_cell(cell);
headers.push(hdr);
}
return headers;
}
</script>
</head>
<body>
파일 선택 : <input type="file" id="excelFile" onchange="excelExport(event)"/>
<h1>Header 정보 보기</h1>
<div id="displayHeaders"></div>
<h1>JSON 형태로 보기</h1>
<div id="displayExcelJson"></div>
<h1>CSV 형태로 보기</h1>
<div id="displayExcelCsv"></div>
<h1>HTML 형태로 보기</h1>
<div id="displayExcelHtml"></div>
</body>
</html>int a = 10;
int b = 20;
// [1] 문자열에 변수를 적용하는 기본 방법
string s = string.Format("{0} + {1} = {2}", a, b, a+b);
// [2] 문자열에 직접 변수를 사용하고 할 경우 (조금 더 직관적)
string s = string.Format($"{a} + {b} = {a+b}");
// [3] 여러 줄의 문자열로 구성된 내용을 표시 할 경우의 기본 방법
StringBuilder sb = new StringBuilder();
sb.Append("<table>");
sb.Append("<tr>");
sb.Append("<td>");
sb.Append("a=" + a + ", b=" + b);
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</table>");
// [4] 여러 줄의 문자열로 구성된 내용을 표시 할 경우 (조금 더 직관적)
string s = string.Format($@"
<table>
<tr>
<td>
a={a}, b={b}
<td>
</tr>
</table>
");
[추가 설명]
$ : 문자열에 직접 변수를 사용하고 할 경우
@ : 여러 문자열을 화면에 표현되는 그대로 인식하고자 할 경우
SQL Server Management Studio 사용하여 인덱스 유지 관리
인덱스를 다시 구성하거나 다시 작성하려면
1. 개체 탐색기에서 인덱스를 다시 구성할 테이블이 포함된 데이터베이스를 확장합니다.
2. 테이블 폴더를 확장합니다.
3. 인덱스를 다시 구성할 테이블을 확장합니다.
4. 인덱스 폴더를 확장합니다.
5. 다시 구성할 인덱스를 마우스 오른쪽 단추로 클릭하고 다시 구성을 선택합니다.
6. 인덱스 다시 구성 대화 상자에서 다시 구성할 인덱스 표에 올바른 인덱스가 있는지 확인한 다음 확인을 클릭합니다.
7. 큰 개체 열 데이터 압축 확인란을 선택하여 LOB(Large Object) 데이터가 포함된 모든 페이지도 압축되도록 지정합니다.
8. 확인.
테이블의 모든 인덱스를 다시 구성하려면
1. 개체 탐색기에서 인덱스를 다시 구성할 테이블이 포함된 데이터베이스를 확장합니다.
2. 테이블 폴더를 확장합니다.
3. 인덱스를 다시 구성할 테이블을 확장합니다.
4. 인덱스 폴더를 마우스 오른쪽 단추로 클릭하고 모두 다시 구성을 선택합니다.
5. 인덱스 다시 구성 대화 상자에서 다시 구성할 인덱스에 올바른 인덱스가 있는지 확인합니다. 다시 구성할 인덱스 표에서 인덱스를 제거하려면 인덱스를 선택한 다음 Delete 키를 누릅니다.
6. 큰 개체 열 데이터 압축 확인란을 선택하여 LOB(Large Object) 데이터가 포함된 모든 페이지도 압축되도록 지정합니다.
7. 확인.
[1] 특정 인덱스를 다시 구성하려면
ALTER INDEX IX_Employee_OrganizationalLevel_OrganizationalNode
ON HumanResources.Employee
REORGANIZE;
[2] 테이블의 모든 인덱스를 다시 구성하려면 (인덱스를 다시 작성하는 것보다 리소스가 덜 사용됩니다. 기본 인덱스 유지 관리 방법.)
ALTER INDEX ALL ON HumanResources.Employee
REORGANIZE;
[3] 인덱스를 다시 작성하려면 (인덱스가 삭제된 다음 다시 생성됩니다. 작업 시 잠금 및 DB성능 저하.)
ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee
REBUILD;
[4] 테이블에서 모든 인덱스를 다시 작성하려면 (서비스 내리고 진행해야 함. 데이터의 크기에 따라 시간이 오래 걸릴 수 있음.)
ALTER INDEX ALL ON Production.Product
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
STATISTICS_NORECOMPUTE = ON);
#테이블 변수사용의 예 use pubs go declare @tmptable table ( nid int identity(1,1) not null, title varchar (80) not null ) -- 테이블 변수 선언 inse...