2010-08-11 2 views
2

일부 데이터를 Excel에서 Excel로 전송할 때이 함수를 사용하여 레이블을 만들었습니다.PHP를 Excel로 변환, 굵게 글꼴

function xls_label($row, $col, $value, $bold) 
{  
    echo pack("ssssss", 0x204, 8 + strlen($value), $row, $col, 0x0, strlen($value)); 
    echo $value; 
} 

일반 글꼴로 레이블을 추가합니다.

이제 레이블의 글꼴을 굵게 만들기 위해이 함수에 무엇을 추가해야하는지 궁금합니다.


이 단순한 기능이 필요하기 때문에 어떤 라이브러리도 사용하고 싶지 않습니다.

+4

나는 배를 사용하여 엑셀 작가, 당신은 스타일을 사용하는 많은 옵션이 있습니다 .http : //pear.php.net/package/Spreadsheet_Excel_Writer –

+0

아주 간단한 Excel 파일을 만들어야하기 때문에 모든 종류의 라이브러리를 사용하고 싶지 않습니다. – Thys

+10

서식/글꼴을 사용하는 경우 더 이상 "매우 간단한"Excel 파일이 아닙니다. 일단 포맷 작업을 시작하면 BIFF 파일 형식의 내장으로 뛰어 들어가고보기 흉하게 질리게됩니다. 하임 (Haim)이라는 패키지는 매우 가볍고 잘 작동하지만 Excel 5.0 이상을 지원하는 한 물속에서 거의 죽어있다. http://phpexcel.codeplex.com을 사용하여 최신/최신 라이브러리를 다운로드하십시오. Excel '07까지 처리합니다. –

답변

6

"라이브러리를 사용한다고 말하고 싶습니다. 왜냐하면 (Mark B가 말했듯이)"포맷팅/글꼴을 사용한다면 더 이상 "매우 간단한"Excel 파일이 아닙니다. " 당신이 0x204

의 레이블 세포 마커를 사용하고 있기 때문에

하고있는 중요한 요소는 당신의 팩 문에서 0x0 값입니다 당신은 당신이 필요 BIFF 버전 말을하지 않습니다, 그래서 BIFF5을 가정합니다 :

echo pack("ssssss", 0x204, 8 + strlen($value), $row, $col, 0x0, strlen($value)); 

"Workbook Global Substream"에서 Font xf 레코드를 만든 다음 0x0 값을 해당 글꼴 레코드의 xf 식별자 +16으로 설정해야합니다.

새 글꼴 레코드를 추가해야하는 곳을 식별 할만큼 코드를 표시하지 않지만 글꼴 레코드의 형식은 0x0031입니다. 이미 기본 글꼴 레코드 (xf = 0)를 작성해야하므로 코드의이 섹션을 수정하여 xf가 1 인 두 번째 글꼴 레코드를 만들어야합니다. 그러면 0x0이 0x11이어야합니다. .

굵은 글꼴의 경우이 글꼴 레코드는 오프셋 6에서 0x02BC의 값을 필요로합니다. 나중에 참조 할 경우 이후 글꼴 스타일을 추가하려는 경우 기울임 꼴은 오프셋 2에서 0x0002의 비트 마스크가 필요합니다. 취소 선에는 비트 마스크가 필요합니다. 0x8008은 오프셋 2입니다. 오프셋 4는 글꼴 색을 변경하려는 경우 색상 색인을 가리키고, 오프셋 8은 위 첨자/아래 첨자를 나타내며 오프셋 10은 밑줄 유형을 나타냅니다. 오프셋 11, 12 및 14는 폰트 패밀리, 문자 세트 및 폰트 이름의 크기, 폰트 이름 자체를 식별합니다. 당신은 아마도 감사 시작으로

당신은 http://msdn.microsoft.com/en-us/library/cc313154(v=office.12).aspx

에서 모든 옵션의 자세한 내용을 찾을 수 있습니다, 이것은 당신이 믿고 싶은 것만 큼 단순하고 간단하지 않다. 그래서 우리 대부분은 복잡한 바이너리 형식으로 작업 할 때 라이브러리를 사용하여 모든 것을 스스로 작성하려고 시도합니다.

+0

offest는 무엇을 의미합니까? – Bongsky

+0

offset == offset : 블록 시작 위치입니다. –

+0

오전 에코 팩 함수에서이 대담한 것을 구현하는 방법에 대한 예제를 요청할 수 있습니다 – Bongsky

5

비밀을 말하십시오. HTML 표를 만들어 .XLS 확장명의 파일에 기록하십시오. 엑셀이 열리면 IE와 같은 형식으로 읽히지 만 스프레드 시트가 생깁니다. 즉, 어떤 형식 으로든 신청할 수 있습니다. 이것을 PHP와 연결하면, 일주일 동안 웹 개발자 부서의 황금 소년이됩니다.

+0

먼저; HTML을 .xls 해킹으로 저장하는 것에 대해 알고 있지만 Excel은 html을 스프레드 시트로 변환하는 몇 안되는 응용 프로그램 중 하나이며 올바른 마크 업이 아니라는 경고를받습니다. 둘째; 내 질문에 대한 대답이 아닙니다. – Thys

+1

"Excel이 스프레드 시트로 HTML을 변환하는 몇 안되는 응용 프로그램 중 하나"라는 것을 알지는 못했지만, 어쩌면 당신의 질문을 더 잘 말해야합니다. 이 솔루션은 실제로 PHP에서 Excel (또는 Calc)으로 데이터를 전송하고 글꼴을 굵게 표시합니다. 그것은 어떤 종류의 라이브러리도 사용하지 않고 그것을하는 가장 직접적인 방법입니다. –

+0

"Excel은 HTML을 스프레드 시트로 변환하는 몇 안되는 응용 프로그램 중 하나입니다."예를 들어 Google 문서 또는 OpenOffice는 .xls 확장명을 가진 문서에 제공된 HTML 표를 변환하거나 열지 않습니다. – Thys

1

나는 ..

<?php 
$fn=$_POST[fname]; 
header("Content-type: application/csv"); 
header("Content-Disposition: attachment; filename=$fn.xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

$c=$_POST[con]; 
print "$c"; 
?> 

포스트 변수가 다른 파일에 생성하고이 파일에 제출 .. 난 굵게, 글꼴 등 같은 모든 html 태그를 사용하여 다음과 같은 형식을 사용

+1

어,이게 질문과 무슨 관련이 있니? – BoltClock

+0

@Boltclock 그는 "이제는 레이블의 글꼴을 굵게 만들기 위해이 함수에 무엇을 추가해야하는지 궁금합니다." 그래서 PHP 문자열에있는 모든 HTML 컨텐트를 사용하고 .xls 파일을 다운로드하기 위해 위의 코드에 게시한다고 말했습니다. 나는 항상 그 질문에 대한 답변을 알려주고 있다고 생각합니다. 그것은 단지 그 것처럼 보일 것입니다 ... – Vijay