XML을 이용한 PHP EXCEL 시트별 제작 및 저장법

2021. 2. 10. 18:40·Language/PHP

제가 매우 도움되었던 정보를 공유합니다.


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>
 
Colored by Color Scripter
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>
Colored by Color Scripter
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

 

 

 

반응형
저작자표시 비영리 (새창열림)
'Language/PHP' 카테고리의 다른 글
  • Composer Error Fix - it is missing from your system. Install or enable PHP's fileinfo extension
  • PHP로 몇초전 몇분전 몇시간전 표시하기
  • php8.0 업데이트, JIT 도입과 성능향상
  • AWS S3 with endpoint putObject Example for PHP
Kua
Kua
정보 공유, 개인 정리 공간 입니다.
  • Kua
    Kua's Miscellaneous
    Kua
    • 분류 전체보기 (185)
      • 대문 (2)
      • Tips (25)
        • Chrome (2)
        • Windows (4)
        • IDE (3)
        • 기타 (16)
      • CodingTest (44)
      • Language (20)
        • PHP (5)
        • C# (7)
        • Java (1)
        • Kotlin (7)
      • Framework & Runtime (16)
        • SpringBoot (12)
        • Node.js (2)
        • Vue.js (1)
        • Gradle (1)
      • DevOps (13)
        • Linux (1)
        • Docker (4)
        • Kubernetes (2)
        • Apache Kafka (1)
        • AWS (1)
      • 일상다반사 (53)
        • 도서 (1)
        • 개발 (8)
        • 후기 - IT (7)
        • 후기 - 일상 (13)
        • 차가리 (4)
        • 방송통신대학교 (4)
        • 음식 (2)
      • Games (12)
        • Minecraft (7)
        • VR (2)
        • 그외 (3)
  • 최근 글

  • 인기 글

  • 태그

    Plugin
    java
    bronze2
    minecraft
    Windows
    코딩테스트
    백준
    Spring Boot
    Silver5
    갤럭시
    github
    spring
    codingtest
    bronze1
    Algorithm
    c#
    Kotlin
    error
    후기
    알고리즘
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.0
Kua
XML을 이용한 PHP EXCEL 시트별 제작 및 저장법
상단으로

티스토리툴바