Perl의 Excel 읽기 및 쓰기 문제
- use strict;
- use warnings;
-
- use Spreadsheet::ParseExcel;
- use MyExcelFormatter;
-
- my $file = 'foo.xls';
-
- my $fmt = new MyExcelFormatter();
-
- my $xls = Spreadsheet::ParseExcel::Workbook->Parse( $file, $fmt );
- my @workSheet = @{ $xls->{Worksheet} };
- foreach my $sheet ( @workSheet ){
- my $sheetName = $sheet->get_name();
- print " : $sheetName
";
-
- my ( $minRow, $maxRow ) = $sheet->row_range();
- my ( $minCol, $maxCol ) = $sheet->col_range();
-
- foreach my $row ( $minRow .. $maxRow ){
- foreach my $col ( $minCol .. $maxCol ){
- my $cell = $sheet->get_cell( $row, $col );
- next unless $cell;
- print " ($row,$col) ", $cell->value;
- }
- print "
";
- }
- }
기본적으로 위의 코드는 Spreadsheet::ParseExcel 문서에서 베낀 것입니다.my $fmt 제외 = new MyExcelFormatter();이 줄 밖.이 줄은 문서 내용의 변환기(포맷 도구)를 생성합니다. 변환기 코드는 다음과 같습니다.
- package MyExcelFormatter;
-
- use strict;
- use warnings;
-
- use base qw(Spreadsheet::ParseExcel::FmtDefault);
-
- use Encode::CN;
- use Encode qw(from_to);
-
- sub new() {
- return bless {};
- }
-
- sub TextFmt( $;$ ) {
- my $this = shift;
- my ($value, $code) = @_;
-
- if ( defined $code and $code eq 'ucs2' ){
- from_to( $value, 'ucs2', 'gb2312' );
- }
- return $value;
- }
-
이렇게 유추하면 모든 로컬 언어 인코딩을 처리할 수 있다.excel을 쓰면 이게 더 간단해요.
- use strict;
- use warnings;
-
- use Spreadsheet::WriteExcel;
-
- my $workbook = new Spreadsheet::WriteExcel( 'foo.xls' );
- my $worksheet = $workbook->add_worksheet( T(' ') );
-
- $worksheet->write( 0, 0, T(' ') );
보시다시피 완전히perldoc 문서의 예를 베낀 것입니다.다만, T('세상 안녕하세요')는 좀 이상해 보일 뿐이다.사실 이것은 사용자 정의 함수입니다.
- use Encode qw(decode);
-
- sub T {
- my $text = shift;
-
- return decode( 'gb2312', $text );
- }
이름은 당연히 T라고 부르지 않고 다른 이름으로 불러도 된다.전체 코드는 다음과 같습니다.
- use strict;
- use warnings;
-
- use Spreadsheet::WriteExcel;
- use Encode qw(decode);
-
- my $workbook = new Spreadsheet::WriteExcel( 'foo.xls' );
- my $worksheet = $workbook->add_worksheet( T(' ') );
-
- $worksheet->write( 0, 0, T(' ') );
-
- sub T {
- my $text = shift;
-
- return decode( 'gb2312', $text );
- }
마지막으로 한 가지 요약: 요점은 하나입니다. excel에 저장된 것은utf8 인코딩일 뿐입니다. 중국어 버전의 윈도우즈 컨트롤러와 다른 일부 소프트웨어는 gb2312 인코딩을 사용하지 않았습니다. 어떤 친구들은 tk 응용 프로그램이나 mysql 응용 프로그램에서 위의 코드를 사용했지만 여전히 혼란스러운 코드를 보았습니다. 그것은 tk와 mysql의 인코딩을 이해하지 못했기 때문에 위의 방법도 만능이 아닙니다.만능적인 방법은 모든 정보 흐름의 인코딩 방안을 분명히 하고 사고방식을 철저히 이해하는 것이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Excel Grep toolExcel Grep tool ■히나가타 ■ 시트 구성 ExcelGrep.cls...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.