Próbowałem sprawdzić wszystkie możliwe podobne rozwiązania zarówno tutaj, jak i w oficjalnej dokumentacji/forach PHPExcel, ale nie znalazłem żadnego rozwiązania problemu.PHPExcel - arkusz klonu zachowuje swój oryginalny styl.
Problem
Próbuję klonu (lub kopią, będąc uczciwym) arkusz do analizowania go do innego pliku utworzonego przez phpexcel przez zachowując styl sklonowany arkusz.
Konfiguracja jest:
sheet.xls < --- plik, aby otworzyć & COPY
obiektu PHPExcel < - plik, który zostanie utworzony X razy w pętli for, gdzie muszę dołącz Arkusze Y zgodnie z zestawem tablic.
Co działa
klonowania & prace dołączanie pięknie, potrzeba czasu, z powodu jakichś dziwnych komunikatów związanych z pliku phpexcel:
Wskazówka: Undefined offset: 1 w \ ServerPath \ PHPExcel \ Classes \ PHPExcel.php na linii 729
Uwaga: Nie zdefiniowane przesunięcie: 2 w \ ścieżka_serwera \ PHPExcelcel \ Klasy \ PHPExcel.php na linii 729
Wskazówki: niezdefiniowanych offset: 3 w \ ServerPath \ PHPExcel \ Classes \ PHPExcel.php na linii 729
Wskazówki: niezdefiniowanych offset: 4 w \ ServerPath \ PHPExcel \ klas \ PHPExcel.php na linii 729
EDIT ::
Linia 729 odnosi się do tego:
foreach ($sheet->getCellCollection(false) as $cellID) {
$cell = $sheet->getCell($cellID);
++$countReferencesCellXf[$cell->getXfIndex()]; // line 729
}
który jest o stylach ile mogę powiedzieć. < - Jest ich tysiące, nie ma pojęcia, skąd pochodzą, pliki są generowane poprawnie, po prostu tracą swój format, jak wspomniano powyżej.
Co nie działa
generowanych plików traci oryginalny format, ale zachowuje wzór, stąd każdą granicę (i każdego stylu) oryginalnego „szablon” (sheet.xls) zgubiony.
Odpowiedni fragment kodu
Ja tylko zaksięgowania naprawdę odpowiedni kod tutaj, głównie dlatego, że jest to około tysiąc linii kodu.
plików, które następnie zostaną zapisane tworzenie (dzieje się w macierzystej foreach):
$file = new PHPExcel();
klonowania (dzieje się wewnątrz foreach dzieci po utworzeniu powyżej):
$sd = $objReader->load("sheet.xls");
$sc = $sd ->getActiveSheet()->copy();
$clonedSheet = clone $sc;
Dołączanie (zdarza się N razy wewnątrz dziecięcego foreach klonowania powyżej):
$ficheName = "not relevant tbh and less than 31 characters";
$temporarySheet = clone $clonedSheet;
$temporarySheet->setTitle($ficheName);
$file->addSheet($temporarySheet,0);
$file->setActiveSheetIndex($file->getIndex($temporarySheet));
unset($temporarySheet);
// some actions are done here
Oszczędzanie (poza z foreach, dzieje się w tym samym foreach gdzie obiekt PHPExcel zostanie utworzona:
$objWriter = PHPExcel_IOFactory::createWriter($file, 'Excel5');
$objWriter->save($filename);
Ograniczenia
mam absolutnie żadnych ograniczeń o jakie formacie excel Mam używam, używam 2003, ponieważ mam kilka maszyn, które działają tylko z programem Excel 2003, ale wkrótce zostaną uaktualnione do pakietu Office 2010, więc dosłownie każdy czytnik i scenarzysta jest w porządku, używam 2003, ponieważ zawsze go używałem i jak dotąd nie miał problemu.
Jestem jednak zmuszony do sklonowania arkusza XLS w innym pliku, jedyną możliwą sztuczką, jaką mogę zrobić, jest sklonowanie arkusza w tym samym pliku i zapisanie go później, zachowując oryginał, ale jeśli jest jakikolwiek inny szansa na "eksport" stylu, który naprawdę bym to docenił.
co już sprawdzone:
PHPExcel clone .xlsm with macros
http://www.mindfiresolutions.com/Cloning-a-XLS-worksheet-in-PHP--Mindfire-Solutions-933.php
PHPExcel 1.8.0 - Creating many sheets by cloning a template sheet gets slower with each clone
Workaround for copying style with PHPExcel
EDIT: :
Ja również próbował:
- otworzyć plik i uzyskać arkusz zamiast klonowanie oryginalny - problem nie ustąpi.
- Próbowałem używać Excel2007 zarówno do czytania, jak i pisania - Problem występuje.
- Próbowano NIE używać -> copy() - problem nie zniknął.
- ZAKTUALIZOWANY phpexcel do 1.8, teraz powyższe Wskazanie pojawia się na linii 1079, ale odnosi się do tego samego fragmentu kodu - Problem nie ustępuje.