본문 바로가기
개발이야기

엑셀 파일 저장하기 (펌웨어)

by 코저씨 2024. 6. 30.
728x90
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta charset="EUC-KR">
<title>프로젝트</title>
</head>
<body>
<table border="1" bordercolor="blue" width ="600" height="250" align = "center" >
    <tr bgcolor="blue" align ="center">
	<p><td colspan = "6" span style="color:white">LOG history</td></p>
    </tr>
    <tr align = "center" bgcolor="skybule">
	<td><b>구분</b></td>
	<td>1번 내용</td>
	<td>2번 내용</td>
	<td>3번 내용</td>
	<td>4번 내용</td>	
    </tr>   	    
</table>
</body>
</html>

저번에 했던 ATSAM4S 프로젝트에서 수신 받는 데이터를 파일로 저장해 달라는 기능이 필요했다.

보통 TXT 파일이나 바이너리 타입으로 저장하지만 여기서 요청사항은 조금 달랐다.

 

파일을 엑셀로 열어서 보고 싶습니다. 

 

?? 뭐라고 ?? 엑셀로 파일을 연다고? 그러면 해당 파일은 엑셀파일이어야 한다고?

엑셀을 열어서 지원하는 파일 리스트를 찾아봤다.

 

엑셀지원 목록파일들

xls 파일이나 xlsx 파일이 가장 유력한데 관련된 오픈소스를 찾아봤다. ( https://github.com/QtExcel/QSimpleXlsxWriter )

 

위 오픈소스 말고도 윈도우 C++ 등 여러 가지가 나왔지만

가장 큰 문제는 OS가 돌아가는 환경에서 구동되는 프로젝트들이었다.

아까도 말했지만 이 프로젝트는 SAM4S 칩이며 사용하는 메모리가 160K밖에 안된다..

여기서 저 라이브러리들을 포팅 하는 건 문제가 되었다. (게다가 USB 메모리스틱 기능도 지원해야 한다.)


두 번째 방법을 찾아야 했다.

위 짤처럼 고객이 원한 건 다른 것일지도 모른다.

개발 미팅을 다시 하여 요청사항 재확인 및 해당 CPU의 스펙을 설명하여 기능을 재정리해 보았다.

파일을 PC에서 열고 싶습니다.

 

로 바뀌었다. 편집은 기본이 아니라고 했다. 그러면 엑셀파일은 아니어도 된다로 바뀌었다.

 


1차 시도..

CSV 파일은 각 컬럼당 , 로 구분하면 되기 때문에 어렵지 않게 개발을 할 수 있으나

좌우 간격을 조절할 수가 없어서 CSV는 제외했다.


 

두 번째로 알아본 건 html 이었다.

더블클릭하면 크롬 등에서 기본으로 열리고 엑셀로 열면 테이블로 만든 부분들이 각 셀에 맞게 나오는 것을 확인했다.

크롬에서 열었을 때

엑셀로 열었을 때

게다가 HTML은 텍스트만으로 구성되었기 때문에 html 문법만 미리 코딩해 놓으면 간단히 해결되었다.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta charset="EUC-KR">
<title>프로젝트</title>
</head>
<body>
<table border="1" bordercolor="blue" width ="600" height="250" align = "center" >
    <tr bgcolor="blue" align ="center">
	<p><td colspan = "6" span style="color:white">LOG history</td></p>
    </tr>
    <tr align = "center" bgcolor="skybule">
	<td><b>구분</b></td>
	<td>1번 내용</td>
	<td>2번 내용</td>
	<td>3번 내용</td>
	<td>4번 내용</td>	
    </tr>   	    
</table>
</body>
</html>

위 html 을 HXD 같은 헥사 에디터로 열어서 C언어 배열로 집어넣는다.

그리고 </table> 자리를 찾아서 새로운 내용이 추가될 때마다 그 위줄에다가 아래와 같이 내용을 추가하면 된다.

<tr align = "center">
<td >일하기 싫다</td><td>1</td><td>X</td><td>NO</td><td>YES</td>
</tr>

그러면 저장된 html을 PC에서 열면 아래와 같이 내용이 추가된다.

html 을 이용해서 색 조절 및 폰트 등을 꾸미면 된다.

이 프로젝트도 이렇게 해서 완료했었다.

728x90