Hvordan kan jeg eksportere tabeller til Excel fra en nettside? Jeg vil at eksporten skal inneholde all formatering og alle farger.
Dette er en php-fil, men du kan kanskje endre den til javascript:
<?php>
$colgroup = str_repeat("<col width=86>",5);
$data = "";
$time = date("M d, y g:ia");
$excel = "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:x=\"urn:schemas-microsoft-com:office:excel\" xmlns=\"http://www.w3.org/TR/REC-html40\">
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html>
<head>
<meta http-equiv=\"Content-type\" content=\"text/html;charset=utf-8\" />
<style id=\"Classeur1_16681_Styles\">
.xl4566 {
color: red;
}
</style>
</head>
<body>
<div id=\"Classeur1_16681\" align=center x:publishsource=\"Excel\">
<table x:str border=0 cellpadding=0 cellspacing=0 style=\"border-collapse: collapse\">
<colgroup>$colgroup</colgroup>
<tr><td class=xl2216681><b>Col1</b></td><td class=xl2216681><b>Col2</b></td><td class=xl2216681 ><b>Col3</b></td><td class=xl2216681 ><b>Col4</b></td><td class=xl2216681 ><b>Col5</b></td></tr>
<tr><td class=xl4566>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>
</table>
</div>
</body>
</html>";
$fname = "Export".time().".xls";
$file = fopen($fname,"w+");
fwrite($file,$excel);
fclose($file);
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'.basename($fname).'"');
readfile($fname);
unlink($fname); ?>
Dette er faktisk enklere enn du tror: Det er bare å kopiere HTML-tabellen (dvs. HTML-koden for tabellen) til utklippstavlen. Excel kan dekode HTML-tabeller og vil til og med prøve å bevare attributtene.
Det vanskelige er å "kopiere tabellen til utklippstavlen", siden det ikke finnes noen standardmetode for å få tilgang til utklippstavlen fra JavaScript. Se dette blogginnlegget: Tilgang til systemets utklippstavle med JavaScript - en hellig gral?.
Nå trenger du bare tabellen som HTML. Jeg foreslår jQuery og metoden html().
Det finnes i praksis to måter å gjøre dette automatisk på, mens bare én løsning kan brukes i alle nettlesere. Først og fremst bør du bruke den åpne xml-spesifikasjonen til å lage Excel-arket. Det finnes gratis plugins fra Microsoft som gjør dette formatet tilgjengelig også for eldre Office-versjoner. Open XML har vært standard siden Office 2007. De to måtene er åpenbart på serversiden eller klientsiden.
Implementeringen på klientsiden bruker en ny CSS-standard som gjør det mulig å lagre data i stedet for bare URL-adressen til dataene. Dette er en god tilnærming fordi du ikke trenger noen serveranrop, bare dataene og litt javascript. Den store ulempen er at Microsoft ikke støtter alle deler av dette i dagens IE (jeg vet ikke om IE9). Microsoft begrenser dataene til å være et bilde, men vi trenger et dokument. I Firefox fungerer det helt fint. For meg var IE det avgjørende punktet.
Den andre måten er å bruke en serverside-implementering. Det bør finnes mange implementeringer av åpen XML for alle språk. Du trenger bare å velge en. I de fleste tilfeller vil det være den enkleste måten å modifisere en visningsmodell til å resultere i et dokument, men du kan sikkert sende alle data fra klientsiden tilbake til serveren og gjøre det samme.