Autor original: Podcast on the Iceberg Quando vi este artigo, fiquei muito surpreso com a paciência do autor original. Embora usemos alguns no dia a dia, nem todos estão listados pelo autor. Ao escrever em Excel, usei pêra. Biblioteca, também usei o cabeçalho do pacote e também usei aqueles que usam o smarty para simplesmente substituir o xml, sem falar no csv. hehe. (Não vou falar sobre o método COM. Existem muitos deles que são legíveis. Também escrevi artigos sobre o uso de wps para gerar palavras, etc.)
Mas quando estava lendo, usei apenas um e esqueci o que era, então tive que voltar e ler o código. Porque se baseia no princípio do empréstimo, não me lembro.
Endereço original: http://xinsync.xju.edu.cn/index.php/archives/3858
Conteúdo original:
Recentemente, devido a necessidades do projeto, preciso desenvolver um módulo para exportar alguns dados do sistema para Excel, modificá-los e depois importá-los de volta para o sistema. Aproveitei a oportunidade para fazer algumas pesquisas sobre isso e aqui estão alguns resumos.
Basicamente, existem dois tipos de arquivos exportados:
1: Formato semelhante ao Excel. Na verdade, este não é um arquivo Excel no sentido tradicional, apenas porque o Excel tem forte compatibilidade e pode ser aberto corretamente. Depois de modificar esse tipo de arquivo e salvá-lo, geralmente você será questionado se deseja convertê-lo em um arquivo Excel.
Vantagens: Simples.
Desvantagens: É difícil gerar o formato. Se for usado para importação, você mesmo precisará escrever o programa correspondente.
2: Formato Excel, correspondente ao Excel, o arquivo gerado por este método está mais próximo do formato Excel real.
Se caracteres ilegíveis aparecerem ao exportar chinês, você pode tentar converter a string para gb2312. Por exemplo, o seguinte converte $yourStr de utf-8 para gb2312:
$yourStr = mb_convert_encoding(”gb2312″, “UTF-8″, $yourStr);
Vários métodos estão listados abaixo em detalhes.
1. Exportação de PHP para Excel
1: A primeira recomendação é o extremamente popular PHPExcel, site oficial: http://www.codeplex.com/PHPExcel
Pode ser importado e exportado, podendo ser exportado para o formato office 2007, que também é compatível com 2003.
O pacote baixado contém documentos e exemplos que você pode estudar por conta própria.
Aqui está um exemplo de cópia de um parágrafo:
Código PHP
<?php
/**
* PHP Excel
*
* Copyright (C) 2006 - 2007 PHPExcel
*
* Esta biblioteca é um software livre que você pode redistribuí-la e/ou
* modificá-lo sob os termos do GNU Lesser General Public
* Licença publicada pela Free Software Foundation;
* versão 2.1 da Licença ou (a seu critério) qualquer versão posterior.
*
* Esta biblioteca é distribuída na esperança de que seja útil,
* mas SEM QUALQUER GARANTIA, mesmo sem a garantia implícita de;
* COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM PROPÓSITO ESPECÍFICO Consulte o GNU.
* Licença Pública Geral Menor para mais detalhes.
*
* Você deveria ter recebido uma cópia do GNU Lesser General Public
* Licencie junto com esta biblioteca; caso contrário, escreva para o Software Livre;
* Foundation, Inc., 51 Franklin Street, Quinto andar, Boston, MA 02110-1301 EUA
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2007 PHPExcel ( http://www.codeplex.com/PHPExcel )
* @license http://www.gnu.org/licenses/lgpl.txt LGPL
* @versão 1.5.0, 23/10/2007
*/
/** Relatório de erros */
relatório_erro(E_ALL);
/** Inclui caminho **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../Classes/');
/** PHPExcel */
inclua 'PHPExcel.php';
/** PHPExcel_Writer_Excel2007 */
inclua 'PHPExcel/Writer/Excel2007.php';
// Cria novo objeto PHPExcel
echo date('H:i:s') . ”Criar novo objeto PHPExceln”;
$objPHPExcel = new PHPExcel();
//Definir propriedades
echo date('H:i:s') . ” Definir propriedadesn”;
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
$objPHPExcel->getProperties()->setLastModifiedBy(”Maarten Balliauw”);
$objPHPExcel->getProperties()->setTitle(”Documento de teste XLSX do Office 2007”);
$objPHPExcel->getProperties()->setSubject(”Documento de teste XLSX do Office 2007”);
$objPHPExcel->getProperties()->setDescrīption("Documento de teste para Office 2007 XLSX, gerado usando classes PHP.");
$objPHPExcel->getProperties()->setKeywords(”office 2007 openxml php”);
$objPHPExcel->getProperties()->setCategory(”Arquivo de resultado do teste”);
//Adiciona alguns dados
echo date('H:i:s') . ”Adicione alguns dadosn”;
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setCellValue('A1′, 'Olá');
$objPHPExcel->getActiveSheet()->setCellValue('B2′, 'mundo!');
$objPHPExcel->getActiveSheet()->setCellValue('C1′, 'Olá');
$objPHPExcel->getActiveSheet()->setCellValue('D2′, 'mundo!');
//Renomear planilha
echo date('H:i:s') . ”Renomear planilhan”;
$objPHPExcel->getActiveSheet()->setTitle('Simple');
// Define o índice da planilha ativa para a primeira planilha, para que o Excel abra esta como a primeira planilha
$objPHPExcel->setActiveSheetIndex(0);
//Salva o arquivo do Excel 2007
echo date('H:i:s') . ” Escrever no formato Excel2007n”;
$objWriter = novo PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
//Eco concluído
echo date('H:i:s') . ” Concluído a gravação do arquivo.rn”;
2. Use o endereço de download da classe Spreadsheet_Excel_Writer do pear: http://pear.php.net/package/Spreadsheet_Excel_Writer
Esta classe depende de OLE, endereço de download: http://pear.php.net/package/OLE
Deve-se observar que o formato do arquivo Excel exportado é relativamente antigo. Se você salvá-lo após a modificação, será perguntado se deseja convertê-lo para um formato mais recente.
Mas você pode definir o formato, que é muito poderoso.
Código PHP
<?php
require_once 'Planilha/Excel/Writer.php';
// Criando uma pasta de trabalho
$ pasta de trabalho = new Planilha_Excel_Writer();
//enviando cabeçalhos HTTP
$pasta de trabalho->send('test.xls');
// Criando uma planilha
$planilha =& $workbook->addWorksheet('Minha primeira planilha');
//Os dados reais
$planilha->write(0, 0, 'Nome');
$planilha->write(0, 1, 'Idade');
$planilha->write(1, 0, 'John Smith');
$planilha->escrever(1, 1, 30);
$planilha->write(2, 0, 'Johann Schmidt');
$planilha->write(2, 1, 31);
$planilha->write(3, 0, 'Juan Herrera');
$planilha->write(3, 1, 32);
// Vamos enviar o arquivo
$pasta de trabalho->fechar();
?>
3: Use o smarty para gerar formatos de suporte de arquivo XML ou HTML que atendam às especificações do Excel, que é uma solução de exportação perfeita. No entanto, o arquivo exportado é essencialmente um arquivo XML. Se for usado para importação, ele precisará ser processado separadamente.
Para obter detalhes, consulte a postagem do rardge hero: http://bbs.chinaunix.net/viewthread.php?tid=745757
Deve-se observar que se o número de linhas na tabela exportada for incerto, é melhor colocar "ss:" no modelo: Exclua coisas como ExpandedColumnCount=”5″ ss:ExpandedRowCount=”21″”.
4. Use a função pack para imprimir os símbolos de quebra de frase que simulam o formato do Excel. Este método é recomendado.
A desvantagem é que não tem formato.
Código PHP
<?php
// Envia cabeçalho
header("Pragma: público");
header("Expira: 0");
header("Cache-Control: deve-revalidar, pós-verificação=0, pré-verificação=0");
header("Tipo de conteúdo: aplicativo/download forçado");
header("Tipo de conteúdo: aplicativo/fluxo de octetos");
header("Tipo de conteúdo: aplicativo/download");;
header(”Disposição do conteúdo: anexo; nome do arquivo = teste.xls “);
header("Codificação de transferência de conteúdo: binário ");
//Célula de dados XLS
xlsBOF();
xlsWriteLabel(1,0,"Minha linha um do Excel");
xlsWriteLabel(2,0,"Minha linha dois do Excel: ");
xlsWriteLabel(2,1,"Olá a todos");
xlsEOF();
função xlsBOF() {
echo pack("ssssss", 0×809, 0×8, 0×0, 0×10, 0×0, 0×0);
retornar;
}
função xlsEOF() {
pacote de eco("ss", 0×0A, 0×00);
retornar;
}
function xlsWriteNumber($Linha, $Col, $Valor) {
echo pack("sssss", 0×203, 14, $Row, $Col, 0×0);
echo pack("d", $Valor);
retornar;
}
function xlsWriteLabel($Linha, $Col, $Valor) {
$L = strlen($Valor);
echo pack("ssssss", 0×204, 8 + $L, $Row, $Col, 0×0, $L);
eco $Valor;
retornar;
}
?>
No entanto, o autor falhou ao usá-lo em um sistema Linux de 64 bits, e todos os símbolos de quebra de frase tornaram-se caracteres ilegíveis.
5. Como usar tabulações e quebras de linha
O caractere de tabulação "t" permite aos usuários separar colunas na mesma linha, e o caractere de nova linha "tn" pode abrir a próxima linha.
<?php
header("Tipo de conteúdo: application/vnd.ms-execl");
header("Disposição do conteúdo: anexo; nome do arquivo=meuExcel.xls");
header("Pragma: sem cache");
header("Expira: 0");
/*primeira linha*/
echo "olá"."t";
echo "mundo"."t";
eco “tn”;
/*início da segunda linha*/
echo “esta é a segunda linha”..”t”;
echo “Oi, linda garota”.”t”;
eco “tn”;
?>
6. Use com
Se o seu PHP puder abrir o módulo com, você poderá usá-lo para exportar arquivos Excel
Código PHP
<?PHP
$nome do arquivo = “c:/spreadhseet/test.xls”;
$planilha1 = 1;
$planilha2 = “planilha2″;
$excel_app = new COM("Excel.application") ou Die ("Não conectou");
imprima “Nome do aplicativo: {$excel_app->Application->value}n”;
print “Versão carregada: {$excel_app->Application->version}n”;
$Workbook = $excel_app->Workbooks->Open(”$filename”) ou Die(”Não abriu $filename $Workbook”);
$Planilha = $Pasta de Trabalho->Planilhas($planilha1);
$Planilha->ativar;
$excel_cell = $Planilha->Intervalo(”C4″);
$excel_cell->ativar;
$excel_result = $excel_cell->valor;
imprimir “$excel_resultadon”;
$Planilha = $Pasta de Trabalho->Planilhas($planilha2);
$Planilha->ativar;
$excel_cell = $Planilha->Intervalo(”C4″);
$excel_cell->ativar;
$excel_result = $excel_cell->valor;
imprimir “$excel_resultadon”;
#Para fechar todas as instâncias do Excel:
$Pasta de trabalho->Fechar;
unset($Planilha);
unset($Pasta de trabalho);
$excel_app->Pastas de trabalho->Fechar();
$excel_app->Sair();
unset($excel_app);
?>
Um exemplo melhor: http://blog.chinaunix.net/u/16928/showart_387171.html
1. Importação de PHP para Excel
1: Ainda uso PHPExcel, site oficial: http://www.codeplex.com/PHPExcel .
2: Use PHP-ExcelReader, endereço de download: http://sourceforge.net/projects/phpexcelreader
Exemplo:
Código PHP
<?php
require_once 'Excel/leitor.php';
//ExcelFile($nomedoarquivo, $codificação);
$dados = new Planilha_Excel_Reader();
// Define a codificação de saída.
$dados->setOutputEncoding('utf8′);
$dados->ler('jxlrwtest.xls');
relatório_erro(E_ALL ^ E_NOTICE);
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
echo """.$data->planilhas[0]['células'][$i][$j]."",";
}
eco “n”;
}
?>
----------
Este site adota o acordo de direitos autorais Creative Commons, que exige atribuição, não comercial e consistência. Este site aceita qualquer reimpressão não comercial, mas deve indicar que vem de "Uncle Fatty's Simple Life", manter o link original e também deve. indique o título original e o link.