DokuWiki

It's better when it's simple

User Tools

Site Tools


tips:xls2wiki

This is an old revision of the document!


xls2wiki

Abstract

This is a simple script that converts copied data from xls to DokuWiki's Table format. The weird UTF-8 code you see is a Russian explanation.

Just copy cells in Excel and paste it, then press 'convert'

code

xls2wiki.php
<?php header("Content-type: text/html; charset=UTF-8"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<script type="text/javascript" charset="utf-8">
	function selText()
	  {
	  document.getElementById("txt1").select()
	  }
	</script>
 
		<style type="text/css">
		body {
			font: .8em "Trebuchet MS", Verdana, Arial, Sans-Serif;
			text-align: center;
			color: #333;
			background-color: #fff;
			margin-top: 0em;
		}
 
		h1 {
			font-size: 2em;
			padding: 0;
			margin: 0;
		}
 
		h5 {
			font-size: 1em;
			color: #09c;
			font-weight: bold;
		}
 
		form {
			background-color: #eee;
			border: 1px solid #ccc;
			margin-left: auto;
			margin-right: auto;
			padding: 1em;
		}
 
 
		a {
			color: #09c;
			text-decoration: none;
			font-weight: bold;
		}
 
 
		</style>
 
</head>
	<?
		$s = $_POST['s'];
		$fromto = $_POST['fromto'];
 
		if ($fromto=="E2W"){
			$s = str_replace("\r\n", " |\n| ", $s);
			$s = str_replace("\t", " | ", $s);
			$s = str_replace("|  |", "| . |", $s);
			$s = str_replace("|  |", "| . |", $s);
			$s = str_replace("|  |", "| . |", $s);
			$s = str_replace("|  |", "| . |", $s);
			$s = "| ".$s;
			$s = substr($s,0,-2); //get rid of last newline conversion
		}else{
			$s = str_replace("^", "|", $s);
			$s = str_replace("|\r\n|", "\r\n", $s);
			$s = str_replace("\r\n ", "\r\n", $s);
			$s = str_replace(" |", "|", $s);
			$s = str_replace("| ", "|", $s);
			$s = str_replace("|", "\t", $s);
			$s = substr($s,1); // get rid of first | without /r/n
 
		}
 
	?>
<body onload="selText()">
<center>
<h5>WIKI2EXCEL converter</h5>
Copy and paste your Excel or Wiki table below and press [Convert!]<br/>
Скопируйте и вставьте таблицу из  Excel или Wiki и нажмите [Convert!] (конвертировать)
	<form method=POST action="">
		<input type="radio" name="fromto" value="E2W" checked>Excel » Wiki<br>
		<input type="radio" name="fromto" value="W2E">Wiki » Excel<br>
		<INPUT TYPE=SUBMIT VALUE="Convert!"><br/> 
		<textarea id="txt1" name="s" wrap="off" cols=80 rows=50 style="width:800; height:450"><? echo $s; ?></textarea>
	</form>
<span style="font-size:80%">
<strong>Version 0.1 : </strong>
<ul>
<li>Headers from wiki2excel will not be converted properly</li>
<li>Links with alternative text (like <i>[[link|alt.text]] ) will not convert properly</li>
</ul>
</span>
</center>
</body></html>

Comments Support Wiki header on first Line

I have find this script helpful
I would like just to add this lines to put the first line like an header:

			//explode the source by line with the use of regular expressions
 
			$arrayS = preg_split ("/[\n,]+/", $s);
 
			$nb_lines = count ($arrayS)-1;
			$s = $s . $nb_lignes;
			$s = ""; // we clean the text
			foreach ( $arrayS as $key => $lines ){
			if ($key == 0) {
 
                        //we put the header here on the first line	
                      $lines = str_replace("|", "^", $lines);		
 
			}//end if
			$s = $s . $lines .  "\n";
			}//end for
 
			$s = substr($s,0,-2); //get rid of last newline conversion
This converts cell contents like “, ” (aka. <comma><space>) into a \n. Couldn't figure out why (code dyslexia)…

Finally, the code with English / French / Russian translations,
empty cells stay empty (no “ . ”), first line become header:

xls2wiki.php
<?php header("Content-type: text/html; charset=UTF-8"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<script type="text/javascript" charset="utf-8">
	function selText()
	  {
	  document.getElementById("txt1").select()
	  }
	</script>
 
		<style type="text/css">
		body {
			font: .8em "Trebuchet MS", Verdana, Arial, Sans-Serif;
			text-align: center;
			color: #333;
			background-color: #fff;
			margin-top: 0em;
		}
 
		h1 {
			font-size: 2em;
			padding: 0;
			margin: 0;
		}
 
		h5 {
			font-size: 1em;
			color: #09c;
			font-weight: bold;
		}
 
		form {
			background-color: #eee;
			border: 1px solid #ccc;
			margin-left: auto;
			margin-right: auto;
			padding: 1em;
		}
 
 
		a {
			color: #09c;
			text-decoration: none;
			font-weight: bold;
		}
 
 
		</style>
 
</head>
	<?
		$s = $_POST['s'];
		$fromto = $_POST['fromto'];
 
		if ($fromto=="E2W"){
 
 
			$s = str_replace("\r\n", " |\n| ", $s);
			$s = str_replace("\t", " | ", $s);
			//$s = str_replace("|  |", "| . |", $s);
 
			$s = "| ".$s;
			$s = substr($s,0,-2); //get rid of last newline conversion
 
 
			//explode the source by line
			$arrayS = preg_split ("/[\n,]+/", $s);
			$nb_lines = count ($arrayS)-1;
			$s = $s . $nb_lignes;
			$s = "";
			foreach ( $arrayS as $key => $lines ){
			if ($key == 0) {
			$lines = str_replace("|", "^", $lines);			
			}//end if
			$s = $s . $lines .  "\n";
			}//end for
 
			$s = substr($s,0,-2); //get rid of last newline conversion
		}else{
			$s = str_replace("^", "|", $s);
			$s = str_replace("|\r\n|", "\r\n", $s);
			$s = str_replace("\r\n ", "\r\n", $s);
			$s = str_replace(" |", "|", $s);
			$s = str_replace("| ", "|", $s);
			$s = str_replace("|", "\t", $s);
			$s = substr($s,1); // get rid of first | without /r/n
 
		}
 
	?>
<body onload="selText()">
<center>
<h5>WIKI2EXCEL converter</h5>
 
Copy and paste your Excel or Wiki table below and press [Convert!]<br/>
Copier et coller votre Table Excel ou Wiki dans le cadre ci-dessous et cliquez sur [Convert!]<br/>
Скопируйте и вcтавьте таблицу из Excel или Wiki и нажмите [Convert!] (конвертировать)
	<form method=POST action="">
		<input type="radio" name="fromto" value="E2W" checked>Excel » Wiki<br>
		<input type="radio" name="fromto" value="W2E">Wiki » Excel<br>
		<INPUT TYPE=SUBMIT VALUE="Convert!"><br/> 
		<textarea id="txt1" name="s" wrap="off" cols=50 rows=50 style="width:400; height:450"><? echo $s; ?></textarea>
	</form>
<span style="font-size:80%">
<strong>Version 0.1 : </strong>
<ul>
<li>Headers from wiki2excel will not be converted properly</li>
<li>Links with alternative text (like <i>[[link|alt.text]]</i> ) will not convert properly</li>
</ul>
</span>
</center>
</body></html>

There is a spell mistake here…

$nb_lines = count ($arrayS)-1;
$s = $s . $nb_lignes;

nb_lignes should be nb_lines.

Installation

:?: Please forgive such a n00b question, but how does one install this helpful Trick? A small installation section would be extremely helpful. ;-)

My n00b answer:

use iframe….

create a PHP page somewhere into your website DokuWiki root and put the code inside.

Use iframe to include this PHP page into a wiki page. Look to this plugins if you hate HTML: iframe

You can not try to include directly the code in a wiki page either: something like:

<php>
Put the code here//§
</php>

Because the page use little JavaScript tricks.


More simple. Save xls2wiki.php to your dokuwiki\www\ folder and click this link: http://localhost/xls2wiki.php. For net security set file attributes 600.


Discussion

I've installed iframe, but I'm kind of stuck how can I add the PHP file on the page I want to embed an excel spreadsheet. Can anyone help? Thanks in advance.

Resp.: I've found a way creating a wikipage and adding \\servername\drive\dokuwiki\XLStoWIKI.php to it. Is this the best way? Now I have the page but after pasting the spreadsheet content and hitting convert nothing seems to happen. Please help.

Remarks

If you like this you probably love this HTML converter as well: http://diberri.dyndns.org/wikipedia/html2wiki/index.html

Bad link!


Does not work for me, keep seeing “ <? echo $s; ?> ” in the input field, and convert does not do a thing, neither on IE nor on Firefox.

Perhaps I'm doing something wrong??

-Theo


@theo: It's a “new” setting in current php versions which disables the php short tags, so you either have to replace the:

<?

with:

<?php

in the php script, or in your php.ini set the following parameter:

short_open_tag = on

-Steven

Changing the ini files worked for me - you also need to restart your Apache server before it will work. — gymnophoria 2013/01/10 16:58

tips/xls2wiki.1362119805.txt.gz · Last modified: 2013-03-01 07:36 by 2402:f000:1:1501:200:5efe:a66f:417a

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki