Hej! Jag skulle tipsa om: Hej Henry och tack! Nu har jag inte .xls:filen så jag kan replikera felet, men jag skulle chansa på att det beror på cache:en. Hej! De uppnår i stort sätt samma effekt, men enlight PHPExcel's förtydlighetsbristande dokumentation så:Skriva och läsa värden i excel med php
Som rubriken lyder:
Kan man på något vis skriva ett värde till excel med php där excel gör diverse beräkningar.
Och sedan då hämta resultatet med php.
Finns det kommandon för detta?
/LarsSv: Skriva och läsa värden i excel med php
http://phpexcel.codeplex.com/
Den stöder skrivning till en stor mängd excel:formater, samt kalkylering av formulärvärderingar.
Funktionslistan finns här:
http://phpexcel.codeplex.com/wikipage?title=Features&referringTitle=Home
För att utnyttja motoren så krävs:
* PHP version 5.2.0 eller högre
* PHP extension php_zip aktiverad ( *1 )
* PHP extension php_xml aktiverad
* PHP extension php_gd2 aktiverad
( *1 ) php_zip krävs enbart om du ska använda:
PHPExcel_Reader_Excel2007,
PHPExcel_Writer_Excel2007,
PHPExcel_Reader_OOCalc.
Eller kortfattat: bara om du behöver hantera .xlsx eller .ods-filer.Sv:Skriva och läsa värden i excel med php
Jag hade redan hittat phpexcel men inte tänkt på att meddela mig här.
Jag har däremot redan stött på patrull. Kan du hjälpa mig med detta.
Scriptet går ut på att jag öppnar en befintlig excel-fil (ID151.xls). PHP skriver ett
tal i cell A1. Excel gör beräkning i B1 (=A1+C1). PHP läser resultatet i B1
och presenterar resultatet. Funkar perfekt.
Ett nytt tal skrivs i A1. Excel ska göra ny beräkning men det händer inte.
A1 presenteras med det nya värdet. B1 presenteras med den gamla beräkningen.
Vad gör jag för fel?
<?php
require 'Classes/PHPExcel/IOFactory.php';
$objPHPExcel = PHPExcel_IOFactory::load("excelfiler/ID151.xls");
$objPHPExcel->getActiveSheet()->setCellValue('A1', '100.57');
$val1 = $objPHPExcel->getActiveSheet()->getCell('A1')->getCalculatedValue();
$val2 = $objPHPExcel->getActiveSheet()->getCell('B1')->getCalculatedValue();
echo $val1.' '.$val2;
echo' <br><br><br>';
$objPHPExcel->getActiveSheet()->setCellValue('A1', '98.19');
$val1 = $objPHPExcel->getActiveSheet()->getCell('A1')->getCalculatedValue();
$val2 = $objPHPExcel->getActiveSheet()->getCell('B1')->getCalculatedValue();
echo $val1.' '.$val2;
?>
Sv: Skriva och läsa värden i excel med php
PHPExcel levererar försöker att uppnå maximal prestanda genom att "cache:a" resultatet av beräkningsformulärer så fort de har kört en gång,
vilket kan vara förklaringen bakom att $val2 har samma värde som första beräkningen som gjordes.
Om du vill ändra underliggande datat (A1) bör cache:n tömmas innan du begär det beräknade värdet igen.
För att uppnå detta mål kan du använda följande metod (samtidigt som du -och jag- håller tummarna):
PHPExcel_Calculation::getInstance()->clearCalculationCache();
Alternativt den följande metoden:
PHPExcel_Calculation::flushInstance();
Du kan även ändra standardinställningen så att resultaten inte cachas alls.
(Kom ihåg att det kommer att drabba prestandan på PHPExcel, så kanske lösningen ovan duger)
För att göra detta, innan du skickar förfrågningar till beräkningsmotorn, använd:
PHPExcel_Calculation::getInstance()->setCalculationCacheEnabled(FALSE);
Alternativt:
PHPExcel_Calculation::getInstance()->disableCalculationCache();
Jag hoppas att jag har träffat rätt, men jag bollar gärna om problemet uppstår.
Sv:Skriva och läsa värden i excel med php
Båda metoderna fungerar, men jag måste ladda in Excelbladet igen. Spelar ingen roll i och för sig.
Vad är det för skillnad mellan de båda metoderna:
$objPHPExcel = PHPExcel_Calculation::getInstance()->clearCalculationCache();
och
$objPHPExcel = PHPExcel_Calculation::flushInstance();
Appropå Excelbladet:
A1: Värde in
B1: =A1+C1
C1: -0,13
Det är inget annat än ett exempelblad att öva mig på. :)
/Lars
Sv: Skriva och läsa värden i excel med php
$objPHPExcel = PHPExcel_Calculation::flushInstance();
- Spolar cachen för varje befintlig instans av klassen (fast enbart om beräkningsmotoren har initierats).
$objPHPExcel = PHPExcel_Calculation::getInstance()->clearCalculationCache();
- Spolar cachen