제가 매우 도움되었던 정보를 공유합니다.
php 로 엑셀저장시 저 같은 경우 우선 출력할 폼을 엑셀에서 만들어서 xml파일로 저장을 합니다.
제가 만든고자 하는 파일은 첫번째 시트는 20년도 통계,1월,2월 3월 ... 12월로 저장 하려고 했습니다.
출력할 폼을 만드는데 20년통계,1월 두개의 시트로 만들어저장을 합니다..이때 디자인도 같이 다 설정을 합니다.
폰트사이즈,라인, 문자인지 숫자인지 숫자라면 3자리마다 "," 를 찍을껀지 등등.
이 xml 이란 파일 참 까다롭더군요..
최상단에
1
2
3
4
5
|
header('Content-type: appliction/vnd.ms-excel');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
header("Content-Disposition: attachment; filename=파일이름.xls;");
|
xml에서
1
|
echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Styles>
<Style>
스타일 시트 들어가는부분
</Style>
</Styles>
<Worksheet ss:Name="20년통계">
<Table ss:ExpandedColumnCount="20" ss:ExpandedRowCount="11166" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="16.5">
<Row ss:AutoFitHeight="0" ss:Height="70.5">
<Cell ss:MergeAcross="18" ss:StyleID="m2761391286256"><Data ss:Type="String"><? echo $year;?> 통합 <? echo $jaje_name;?> 품질 실적</Data></Cell>
<Cell ss:StyleID="s58"/>
</Row>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s59"><Data ss:Type="String">LOT</Data></Cell>
<Cell ss:StyleID="s60"><Data ss:Type="String">항목</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">'2020년</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">1Q</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">2Q</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">3Q</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">4Q</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">1월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">2월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">3월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">4월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">5월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">6월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">7월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">8월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">9월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">10월</Data></Cell>
<Cell ss:StyleID="s61"><Data ss:Type="String">11월</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="String">12월</Data></Cell>
</Row>
|
cs |
요렇게 첫번째 시트 시작합니다..요기서 중요한 팁
ss:ExpandedRowCount="11166" 요거 테이블 총 줄수입니다...저렇게 크게 해놓은건
총줄수 보다 작으면 오류납니다..
xml 에서 중요한건 열수가 작으면 오류가 난다는거....
아래꺼를 for로 돌리면 되는데.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<Worksheet ss:Name="<? echo $i;?>월">
<Table ss:ExpandedColumnCount="20" ss:ExpandedRowCount="11850" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="16.5">
<Row ss:Height="31.5">
<Cell ss:MergeAcross="12" ss:StyleID="m2761391285624"><Data ss:Type="String"><? echo $jaje_name;?> 불량 현황 <? echo $i;?>월</Data></Cell>
</Row>
<Row>
<Cell ss:StyleID="s107"><ss:Data ss:Type="String" >Lot</ss:Data></Cell>
<Cell ss:StyleID="s129"><Data ss:Type="String">항목</Data></Cell>
</Row>
</Table>
</Worksheet>
|
cs |
요기에서도 ss:ExpandedRowCount="11850" 요기부분 줄수 입니다..작게하며 오류납니다.
또하나 팁 xml 저장해서 열기를 했을때 오류가 어떤 오류로 파일이 안열리는지 기본적으로 알려주질 않아서
모르겠더라구요..그걸 디버깅 할수 있는 방법이 엑설을 열어서 옵션->보안센터 -> 보안센터 설정 -> 제한된 보기에
인터넷에서 가저온 파일에 대한 제한된 보기사용과 안전하지 않은 위치에 있는 파일에 대해 제한보기사용을 체크 해제
하시면 오류가 난 XML 파일을 열경우 로그파일오 오류를 떨궈 내는 위치가 나옵니다..그곳 로그를 확인하시면
어디 부분에 오류가 나는지 확인이 가능합니다..
또하나 팁으로 XML 에서 특수문자 예를 들어 "<br>" 이런 특수문자를 문자로 출력하며 오류가 뜹니다..
이것또한 "<br>"를 " " 이렇게 치환을 해줘야 오류가 안납니다..
또하나 <Data ss:Type="String">111</Data> String 에서 어떤 문자던 상관없습니다.위에 특수문자 제외하구요..
그러나 <Data ss:Type="Number">abc</Data> 이렇게 Number 로 돼있는데 문자를 넣으면 오류가 납니다..
글이 길어서 불편하실 수도 있겠네요....참고하시라고 글 올립니다.
꼭 성공하시길 바랍니다..
원문 : www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=82621