์ฐ๋ฆฌ ํ์ฌ๋ ํ ๋ ธํธ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด Microsoft Office์ OneNote๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ค. ์ต๊ทผ OneNote์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ธฐ๊ฐ ๋์๊ณ , ๊ทธ๊ฑธ ๋ด๊ฐ ๋๋งก์ ํ๊ธฐ๋ก ํ๋๋ฐ ์ธํฐ๋ท์ ์๋ฃ๊ฐ ๋ง์ง ์์์ ์๊ฐ๋ณด๋ค ์ ๋ฅผ ๋จน์๋ค. ๊ตฌ๊ธ์ ๊ฒ์ํด๋ณด๋ฉด Word, Excel, PowerPoint์ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ๊ธ๋ค์ ๋ง์ง๋ง OneNote์ ๊ด๋ จ๋ ์๋ฃ๋ ์ฐพ์๋ณด๊ธฐ ํ๋ค์๋ค. ๊ทธ๋ ๊ทธ๋ด ๊ฒ์ด ์ค์ ๋ก OneNote์์์ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ Word๋ Excel ๋ณด๋ค ํจ์ฌ ์ ํ์ ์ด์๋ค. VBA๋ฅผ ์ด์ฉํ ๊ฐ๋จํ ๋งคํฌ๋ก๋ฅผ ๋ง๋ค ์๋ ์๊ณ , VSTO๋ ์ฌ์ฉํ ์ ์๋ค (์ญ์ฌ๊ฐ ๊ธธ์ง ์์์ ๊ทธ๋ฐ๊ฐ..?)
์ด๊ฒ ์ ๊ฒ ์ฐพ์๋ณธ ๊ฒฐ๊ณผ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฐพ์๋ค.
- JavaScript API:
- Office Add-ins ํ๋ ์์ํฌ์ ์ผ๋ถ๋ก, ๊ณต์ ์ฌ์ดํธ์์ ๊ฐ์ฅ ๋จผ์ ์ฐพ์ ์ ์๋ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์น ๊ธฐ์ (HTML, CSS, JavaScript)์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- Windows, macOS, ์น ๋ฑ ๋ค์ํ ํ๋ซํผ์์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์คํํ ์ ์๊ฒ ํฉ๋๋ค.
- COM Add-ins:
- ์ข ๋ ์ ํต์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค. (๊ทธ๋งํผ ๊ฐ๋ฐ๋ ๋ณต์กํ๊ณ ์ด๋ ต์ต๋๋ค.)
- .NET๊ณผ ๊ฐ์ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ฌ์ฉํฉ๋๋ค.
- ์ฃผ๋ก Windows ํ๊ฒฝ์ ํนํ๋์ด ์์ผ๋ฉฐ, ๋ฐ์คํธํฑ ๋ฒ์ ์ Office ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ฆ, ๋ฐ์คํฌํฑ ๋ฒ์ ์์๋ COM Add-ins๋ฅผ, ๊ทธ ์ธ์๋ JavaScript API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ด๋ฒ ๊ธ์์๋ JavaScript API๋ฅผ ์ด์ฉํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ณ , ๋์ค์ ๊ธฐํ๊ฐ ๋๋ฉด COM Add-ins๋ ์์ฑํ ๊ณํ์ด๋ค.
์ค๋น๋ฌผ
- Node.js (LTS ๋ฒ์ )
- Yeoman, Yeoman generator for Office Add-ins
npm install -g yo generator-office
- OneNote ์น๋ฒ์ (๋ฐ์คํฌํฑ ๋ฒ์ ์์๋ ์ฌ์ฉ ๋ถ๊ฐํฉ๋๋ค!)
ํ๋ก์ ํธ ์์ฑํ๊ธฐ
๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์คํํด์ ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ฃผ์ธ์.
yo office
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋์ฌํ ๋ฐ, ์ํ์๋ ๊ธฐ๋ฅ์ ๋ง์ถฐ์ ์ ํํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ์ ๋ "Office Add-in Task Pane Project" → "JavaScript" → [ํ๋ก์ ํธ ์ด๋ฆ] → "OneNote". ์ด๋ ๊ฒ ์ ํํ๋ค์.
๊ทธ๋ผ ํ๋ก์ ํธ๊ฐ ์์ฑ ๋ ํ ๋ฐ ๋์ฌ๊ฒจ๋ณผ๋งํ ํ์ผ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ./manifest.xml ์ฐ๋ฆฌ๊ฐ ๋ง๋ค ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ธํ ๊ฐ์ด ๋ค์ด์์ต๋๋ค. ์ค์ ๋ก ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ถ๋ฌ์ฌ ๋ ํด๋น ํ์ผ์ ๋ถ๋ฌ์ค์๋ฉด ๋ฉ๋๋ค.
- ./src/taskpane ์ฐ๋ฆฌ๊ฐ ์ค์ ๋ก ์์ ํ html, css, js ํ์ผ์ด ๋ค์ด์์ต๋๋ค.
๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ
์ด์ taskpane ํด๋์ ์๋ ํ์ผ๋ค์ ๊ธฐ๋ฅ์ ๊ตฌํํ์๋ฉด ๋ฉ๋๋ค. ์ ๋ ํ์ด์ง์ ๊ฐ์๋ฅผ ์ธ์ฃผ๋ ๊ฐ๋จํ ์์ ์ฐฝ์ ๋ง๋ค๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์์ต๋๋ค.
taskpane.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<title>Page Counter</title>
<script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js"></script>
<script src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-2.2.1.min.js"></script>
<link href="taskpane.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="header">
<h1 id="title">Page Counter</h1>
</div>
<div id="body">
<span id="button">Get count</span>
<div>
<span id="pageCount"></span>
</div>
</div>
</body>
</html>
taskpane.css
body {
width: 100%;
height: 100%;
font-family: 'Arial', sans-serif;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background-color: #fff;
}
#header {
width: 100%;
background-color: #761ba7;
color: #fff;
text-align: center;
padding: 20px 0;
}
#body {
padding: 20px;
}
#button {
background-color: #c461e4;
border: none;
color: white;
padding: 15px 32px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
margin: 4px 2px;
cursor: pointer;
border-radius: 25px;
box-shadow: 0 9px #999;
transition-duration: 0.4s;
}
#button:hover {
background-color: #8f2fb9;
box-shadow: 0 5px #666;
transform: translateY(-4px);
}
#button:active {
background-color: #8f2fb9;
box-shadow: 0 2px #666;
transform: translateY(4px);
}
#pageCount {
display: block;
text-align: center;
margin-top: 20px;
font-size: 16px;
color: #333;
}
taskpane.js
Office.onReady((info) => {
if (info.host === Office.HostType.OneNote) {
document.getElementById("button").onclick = getPageCount;
}
});
export async function getPageCount() {
OneNote.run(function (context) {
var pages = context.application.getActiveSection().pages;
pages.load('id,title');
return context.sync()
.then(function () {
var pageCount = 0;
$.each(pages.items, function (index, object) {
pageCount++;
});
$('#pageCount').text(pageCount + ' pages');
})
.catch(function (error) {
onError(error);
});
});
}
function onError(error) {
console.log("Error: " + error);
}
JavaScript API์ ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๋ฉ์๋๋ค์ ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์์ต๋๋ค.
์ถ๊ฐ ๊ธฐ๋ฅ ์คํํด๋ณด๊ธฐ
Office Add-ins๊ฐ ์น ๊ธฐ๋ฐ์ด๋ผ ๋จผ์ ์น ์๋ฒ๊ฐ ์์ด์ผ ํฉ๋๋ค. ๊ฐ๋จํ ํ ์คํธ ๋ชฉ์ ์ผ๋ก๋ ๋ก์ปฌ ์๋ฒ๋ฅผ ๋๋ฆด ์ ์์ต๋๋ค.
cd [ํ๋ก์ ํธ ํด๋ ๊ฒฝ๋ก]
npm run dev-server
์๋ฒ๋ฅผ ์คํ์ํค๊ณ OneNote ์น์ ๋ค์ด๊ฐ์
Insert → Office Add-ins → Update My Add-in → Browse → manifest.xml ์ถ๊ฐ
ํ์๋ฉด Home ํญ์์ Show Taskpane์ ํตํด ์๊น ๋ง๋ ์์ ์ฐฝ์ ์คํ์ํฌ ์ ์์ต๋๋ค.
Office Add-ins์ ๋ฌธ์ ์
- ์น ์๋ฒ ๋๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํธ์คํ ์๋น์ค๊ฐ ํ์ํ๋ค.
- ๋ฐ์คํฌํฑ ๋ฒ์ ์์ ์ฌ์ฉ ๋ถ๊ฐ. (OneNote 2016 ์ดํ ๋ฒ์ ์์๋ ์ง์๋๋ค ํ๋ค์)
์ฌ์ค ์ ๋ ๊ฐ์ง ๋ฌธ์ ์ ๋๋ฌธ์ ์ ํฌ๋ Office Add-ins๋ฅผ ๋ฒ๋ฆฌ๊ณ COM Add-ins๋ก ๋์ด๊ฐ๋ค์..
์ฐธ๊ณ ์๋ฃ:
https://learn.microsoft.com/en-us/office/dev/add-ins/onenote/