Spreadsheet_Excel_Writer Excel dosyaları oluştururken garip hata

4 Cevap php

İşte kod. Bunun için çok fazla değil.

<?php
include("Spreadsheet/Excel/Writer.php");

$xls = new Spreadsheet_Excel_Writer();

$sheet = $xls->addWorksheet('At a Glance');

$colNames = array('Foo', 'Bar');
$sheet->writeRow(0, 0, $colNames, $colHeadingFormat);

for($i=1; $i<=10; $i++)
{
    $row = array( "foo $i", "bar $i");

    $sheet->writeRow($rowNumber++, 0, $row);
}

header ("Expires: " . gmdate("D,d M Y H:i:s") . " GMT");
header ("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
$xls->send("test.xls");
$xls->close();
?>

Sorun aslında Excel ile dosyayı açtığımda aşağıdaki hatayı alıyorum olduğunu:

File error:  data may have been lost.

Hatta yabancı hataya rağmen, dosya ince görünüyor, bu bir gerçektir. Ben yazılı olarak gerçekleşmesi herhangi bir veri yoktur.

Herhangi bir bu hata kurtulmak için nasıl bir fikir?


Edit

Ben sorunu daha iyi göstermek için kod örneği modifiye ettik. Ben ilk örnek okunaklı bir test olduğunu sanmıyorum.

4 Cevap

Söz konusu kod hataya neden olan bir hata var.

Bu satır sütun adları bir demet satır yazar 0

$sheet->writeRow(0, 0, $colNames, $colHeadingFormat);

Sonra değerini satır yazmak gerekiyordu döngü var.

for($i=1; $i<=10; $i++)
{
    $row = array( "foo $i", "bar $i");

    $sheet->writeRow($rowNumber++, 0, $row);
}

Sorun bu döngü ilk geçişte satır 0 yazar yani $rowNumber yerde ilan olmasıdır.

Bu yazılmasını Excel Writer ile bir sorunu neden gibi görünüyor.

Garip bir şey hata veren Excel dosyası üzerinde, yine de teknik olarak yazılır oldu olsa sütun adları ile satır görmek olmasıdır.

Ben çözüm bulundu here on Google Groups. Yukarıdan aşağıya doğru kaydırın. Bu sorunu bahseder Micah tarafından son yazılan bulunuyor.


Ve burada bir düzeltme

<?php
include("Spreadsheet/Excel/Writer.php");

$xls = new Spreadsheet_Excel_Writer();

$rowNumber = 0;
$sheet = $xls->addWorksheet('At a Glance');

$colNames = array('Foo', 'Bar');
$sheet->writeRow($rowNumber, 0, $colNames, $colHeadingFormat);

for($i=1; $i<=10; $i++)
{
    $rowNumber++;
    $row = array( "foo $i", "bar $i");

    $sheet->writeRow($rowNumber, 0, $row);
}

header ("Expires: " . gmdate("D,d M Y H:i:s") . " GMT");
header ("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
$xls->send("test.xls");
$xls->close();
?>

Mark Biek belirttiği gibi asıl sorun, satır 0 yazar olarak $rowNumber uninitialised ve olmasıdır.

Bu oluşturulan Excel dosyası hücreleri A1 ve B1 için 2 veri girişleri içerir anlamına gelir (0, 0, 0, 1).

Bu önceki Office Service Pack 3 için bir sorun değildi. SP3 yüklü bir kez Ancak, Excel arttıracak bir bir hücre için yinelenen girdileri karşılaştığında "uyarısı veriler kaybolmuş olabilir."

Genel çözelti bir hücreye birden fazla veri yazmak etmektir. :-)

İşte bir detailed explanation sorun daha. Bu (PHP modül türetildiği) Spreadsheet::WriteExcel modülü Perl ancak itme aynı da ilgili bulunmaktadır.

Hmm ben sadece test etmek için yüklü ve bir hata alamadım - bu Foo olması gerektiği gibi dedi.

Oluşturulan dosya 3584 bayt oldu; Ben Excel 2002'de açtı

PHPExcel ile sütunun 0 (A0) yazarken bu hata var. Excel (A1) 1-endeksli olan bu "veriler kaybolmuş olabilir" dedi, neden budur.

$this->m_excel->getActiveSheet()->SetCellValue($chr[$col].$row, $data));

$row 0 başlatıldı