一:
项目目的,通过php4将Excel数据导出到MySQL中。
解决方法:
1、Excel另存为CSV格式。然后将CSV格式直接导入MySQL中(可以通过PHPMyAdmin导入CSV,改分隔符为“,”)。但是如果Excel文件中含多工作表(多个Sheet中都含数据)那么用CSV是不太方便的。因为Excel直接稻城CSV时是不支持多工作表的,只能将每个工作表的数据复制到新建的Excel文件中然后分别导出。
2、Excel另存为XML格式。XML文件天生就是干异构系统数据迁移用的。同时Excel导出XML文件时支持多工作表。
所以决定用XML文件格式导入。
注:(XML从Excel中导出后是UTF-8格式,PHP操作XML时默认编码是ISO-8859-1,而本人的php程序是GB2312编码,所以在操作时注意文件格式的声明和转换。)
二:
PHP4操作XML的步骤:
(1)创建XML编辑器
$parser = xml_parser_create("Encode"); //参数可填写xml文件的编码格式,该参数可选;
(2)设置处理开始标记和结束标记的方法,方法名称以字符串形式提供
xml_set_element_handler($parser, "startElement", "endElement");
//指定遇到XML中的任意开始标记是运行 function startElement,
遇到任意结束标记(</)时运行function endElement; $parser 代表XML编辑器;和image函数类似
(3)设置遇到数据(开始标记和结束标记之间的值)时的处理方式
xml_set_character_data_handler($parser, "characterData"); //设立数据读取时调用function characterData
设置完处理函数後就要打开XML文件,然后用 xml_parse 解析XML文件。xml_parse的调用需要在设置完以上三步后才能调用,否则报错
(4) fopen 打开xml 然后 fread 读xml文件
$filehandler = fopen(“xml文件路径”, "r"); //打开文件
while ($data = fread($filehandler, filesize($xml_file)))
//读xml文件,读取内容长度为 filesize($xml_file)个字节 --xml文件长度
{
xml_parse($parser, $data, feof($filehandler)); //(5) 解析获得的data数据,该过程将会调用上面设置的相应处理方式
}
三、以上是操作步骤,接下来贴出实际样例
读取的xml文件try.xml为(该文件是Excel导出的)
输出结果为:
Array ( [listed_SC] => Array ( [0] => 60001 [1] => 60002 [2] => 60004 ) [operationType] => Array ( [0] => A [1] => B [2] => G ) )
项目目的,通过php4将Excel数据导出到MySQL中。
解决方法:
1、Excel另存为CSV格式。然后将CSV格式直接导入MySQL中(可以通过PHPMyAdmin导入CSV,改分隔符为“,”)。但是如果Excel文件中含多工作表(多个Sheet中都含数据)那么用CSV是不太方便的。因为Excel直接稻城CSV时是不支持多工作表的,只能将每个工作表的数据复制到新建的Excel文件中然后分别导出。
2、Excel另存为XML格式。XML文件天生就是干异构系统数据迁移用的。同时Excel导出XML文件时支持多工作表。
所以决定用XML文件格式导入。
注:(XML从Excel中导出后是UTF-8格式,PHP操作XML时默认编码是ISO-8859-1,而本人的php程序是GB2312编码,所以在操作时注意文件格式的声明和转换。)
二:
PHP4操作XML的步骤:
(1)创建XML编辑器
$parser = xml_parser_create("Encode"); //参数可填写xml文件的编码格式,该参数可选;
(2)设置处理开始标记和结束标记的方法,方法名称以字符串形式提供
xml_set_element_handler($parser, "startElement", "endElement");
//指定遇到XML中的任意开始标记是运行 function startElement,
遇到任意结束标记(</)时运行function endElement; $parser 代表XML编辑器;和image函数类似
(3)设置遇到数据(开始标记和结束标记之间的值)时的处理方式
xml_set_character_data_handler($parser, "characterData"); //设立数据读取时调用function characterData
设置完处理函数後就要打开XML文件,然后用 xml_parse 解析XML文件。xml_parse的调用需要在设置完以上三步后才能调用,否则报错
(4) fopen 打开xml 然后 fread 读xml文件
$filehandler = fopen(“xml文件路径”, "r"); //打开文件
while ($data = fread($filehandler, filesize($xml_file)))
//读xml文件,读取内容长度为 filesize($xml_file)个字节 --xml文件长度
{
xml_parse($parser, $data, feof($filehandler)); //(5) 解析获得的data数据,该过程将会调用上面设置的相应处理方式
}
三、以上是操作步骤,接下来贴出实际样例
<?
php
error_reporting ( E_ALL | E_WARNING );
ini_set ( ' display_errors ' , 1 );
$parser = xml_parser_create ( " UTF-8 " ); // 创建一个parser编辑器
xml_set_element_handler ( $parser , " startElement " , " endElement " ); // 设立标签触发时的相应函数 这里分别为startElement和endElenment
xml_set_character_data_handler ( $parser , " characterData " ); // 设立数据读取时的相应函数
$xml_file = " try.xml " ; // 指定所要读取的xml文件,可以是url
$filehandler = fopen ( $xml_file , " r " ); // 打开文件
while ( $data = fread ( $filehandler , filesize ( $xml_file )))
{
xml_parse ( $parser , $data , feof ( $filehandler ));
}
fclose ( $filehandler );
$fla =& xml_parser_free ( $parser ); // 关闭和释放parser解析器
if ( $fla ){
print_r ( $re );
} else {
echo " XML解析器关闭失败! " ;
}
$name = false ;
$position = false ;
function startElement( $parser_instance , $element_name , $attrs ) // 起始标签事件的函数,只读取开始标记
{
global $Data , $att ;
if ( $element_name == " DATA " )
{
$Data = true ;
switch ( $attrs [ " SS:TYPE " ]){
case " Number " :
$att = " listed_SC " ;
break ;
case " String " :
$att = " operationType " ;
break ;
}
} else {
$Data = false ;
}
}
function characterData( $parser_instance , $xml_data ) // 读取数据时的函数
{ global $Data , $att ;
if ( $Data ){
$a = iconv ( " UTF-8 " , " GB2312 " , $xml_data );
getData( $att , $a );
} // End if
$Data = false ;
}
function endElement( $parser_instance , $element_name ) // 结束标签事件的函数
{
}
function getData( $att , $va ){
global $re ;
$re [ $att ][] = $va ;
}
?>
error_reporting ( E_ALL | E_WARNING );
ini_set ( ' display_errors ' , 1 );
$parser = xml_parser_create ( " UTF-8 " ); // 创建一个parser编辑器
xml_set_element_handler ( $parser , " startElement " , " endElement " ); // 设立标签触发时的相应函数 这里分别为startElement和endElenment
xml_set_character_data_handler ( $parser , " characterData " ); // 设立数据读取时的相应函数
$xml_file = " try.xml " ; // 指定所要读取的xml文件,可以是url
$filehandler = fopen ( $xml_file , " r " ); // 打开文件
while ( $data = fread ( $filehandler , filesize ( $xml_file )))
{
xml_parse ( $parser , $data , feof ( $filehandler ));
}
fclose ( $filehandler );
$fla =& xml_parser_free ( $parser ); // 关闭和释放parser解析器
if ( $fla ){
print_r ( $re );
} else {
echo " XML解析器关闭失败! " ;
}
$name = false ;
$position = false ;
function startElement( $parser_instance , $element_name , $attrs ) // 起始标签事件的函数,只读取开始标记
{
global $Data , $att ;
if ( $element_name == " DATA " )
{
$Data = true ;
switch ( $attrs [ " SS:TYPE " ]){
case " Number " :
$att = " listed_SC " ;
break ;
case " String " :
$att = " operationType " ;
break ;
}
} else {
$Data = false ;
}
}
function characterData( $parser_instance , $xml_data ) // 读取数据时的函数
{ global $Data , $att ;
if ( $Data ){
$a = iconv ( " UTF-8 " , " GB2312 " , $xml_data );
getData( $att , $a );
} // End if
$Data = false ;
}
function endElement( $parser_instance , $element_name ) // 结束标签事件的函数
{
}
function getData( $att , $va ){
global $re ;
$re [ $att ][] = $va ;
}
?>
读取的xml文件try.xml为(该文件是Excel导出的)
<?
xml version="1.0"
?>
<? mso-application progid="Excel.Sheet" ?>
< Workbook xmlns ="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o ="urn:schemas-microsoft-com:office:office"
xmlns:x ="urn:schemas-microsoft-com:office:excel"
xmlns:ss ="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html ="http://www.w3.org/TR/REC-html40" >
< DocumentProperties xmlns ="urn:schemas-microsoft-com:office:office" >
< Author > CFXY-ZJ </ Author >
< LastAuthor > CFXY-ZJ </ LastAuthor >
< Created > 2007-11-29T02:47:50Z </ Created >
< LastSaved > 2007-11-29T02:48:23Z </ LastSaved >
< Company > CFXY </ Company >
< Version > 11.5606 </ Version >
</ DocumentProperties >
< ExcelWorkbook xmlns ="urn:schemas-microsoft-com:office:excel" >
< WindowHeight > 8895 </ WindowHeight >
< WindowWidth > 13875 </ WindowWidth >
< WindowTopX > 120 </ WindowTopX >
< WindowTopY > 30 </ WindowTopY >
< ProtectStructure > False </ ProtectStructure >
< ProtectWindows > False </ ProtectWindows >
</ ExcelWorkbook >
< Styles >
< Style ss:ID ="Default" ss:Name ="Normal" >
< Alignment ss:Vertical ="Center" />
< Borders />
< Font ss:FontName ="宋体" x:CharSet ="134" ss:Size ="12" />
< Interior />
< NumberFormat />
< Protection />
</ Style >
</ Styles >
< Worksheet ss:Name ="Sheet1" >
< Table ss:ExpandedColumnCount ="2" ss:ExpandedRowCount ="3" x:FullColumns ="1"
x:FullRows ="1" ss:DefaultColumnWidth ="54" ss:DefaultRowHeight ="14.25" >
< Row >
< Cell >< Data ss:Type ="Number" > 60001 </ Data ></ Cell >
< Cell >< Data ss:Type ="String" > A </ Data ></ Cell >
</ Row >
< Row >
< Cell >< Data ss:Type ="Number" > 60002 </ Data ></ Cell >
< Cell >< Data ss:Type ="String" > B </ Data ></ Cell >
</ Row >
< Row >
< Cell >< Data ss:Type ="Number" > 60004 </ Data ></ Cell >
< Cell >< Data ss:Type ="String" > G </ Data ></ Cell >
</ Row >
</ Table >
< WorksheetOptions xmlns ="urn:schemas-microsoft-com:office:excel" >
< Selected />
< Panes >
< Pane >
< Number > 3 </ Number >
< ActiveRow > 2 </ ActiveRow >
< ActiveCol > 1 </ ActiveCol >
</ Pane >
</ Panes >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
< Worksheet ss:Name ="Sheet2" >
< Table ss:ExpandedColumnCount ="0" ss:ExpandedRowCount ="0" x:FullColumns ="1"
x:FullRows ="1" ss:DefaultColumnWidth ="54" ss:DefaultRowHeight ="14.25" />
< WorksheetOptions xmlns ="urn:schemas-microsoft-com:office:excel" >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
< Worksheet ss:Name ="Sheet3" >
< Table ss:ExpandedColumnCount ="0" ss:ExpandedRowCount ="0" x:FullColumns ="1"
x:FullRows ="1" ss:DefaultColumnWidth ="54" ss:DefaultRowHeight ="14.25" />
< WorksheetOptions xmlns ="urn:schemas-microsoft-com:office:excel" >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
</ Workbook >
<? mso-application progid="Excel.Sheet" ?>
< Workbook xmlns ="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o ="urn:schemas-microsoft-com:office:office"
xmlns:x ="urn:schemas-microsoft-com:office:excel"
xmlns:ss ="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html ="http://www.w3.org/TR/REC-html40" >
< DocumentProperties xmlns ="urn:schemas-microsoft-com:office:office" >
< Author > CFXY-ZJ </ Author >
< LastAuthor > CFXY-ZJ </ LastAuthor >
< Created > 2007-11-29T02:47:50Z </ Created >
< LastSaved > 2007-11-29T02:48:23Z </ LastSaved >
< Company > CFXY </ Company >
< Version > 11.5606 </ Version >
</ DocumentProperties >
< ExcelWorkbook xmlns ="urn:schemas-microsoft-com:office:excel" >
< WindowHeight > 8895 </ WindowHeight >
< WindowWidth > 13875 </ WindowWidth >
< WindowTopX > 120 </ WindowTopX >
< WindowTopY > 30 </ WindowTopY >
< ProtectStructure > False </ ProtectStructure >
< ProtectWindows > False </ ProtectWindows >
</ ExcelWorkbook >
< Styles >
< Style ss:ID ="Default" ss:Name ="Normal" >
< Alignment ss:Vertical ="Center" />
< Borders />
< Font ss:FontName ="宋体" x:CharSet ="134" ss:Size ="12" />
< Interior />
< NumberFormat />
< Protection />
</ Style >
</ Styles >
< Worksheet ss:Name ="Sheet1" >
< Table ss:ExpandedColumnCount ="2" ss:ExpandedRowCount ="3" x:FullColumns ="1"
x:FullRows ="1" ss:DefaultColumnWidth ="54" ss:DefaultRowHeight ="14.25" >
< Row >
< Cell >< Data ss:Type ="Number" > 60001 </ Data ></ Cell >
< Cell >< Data ss:Type ="String" > A </ Data ></ Cell >
</ Row >
< Row >
< Cell >< Data ss:Type ="Number" > 60002 </ Data ></ Cell >
< Cell >< Data ss:Type ="String" > B </ Data ></ Cell >
</ Row >
< Row >
< Cell >< Data ss:Type ="Number" > 60004 </ Data ></ Cell >
< Cell >< Data ss:Type ="String" > G </ Data ></ Cell >
</ Row >
</ Table >
< WorksheetOptions xmlns ="urn:schemas-microsoft-com:office:excel" >
< Selected />
< Panes >
< Pane >
< Number > 3 </ Number >
< ActiveRow > 2 </ ActiveRow >
< ActiveCol > 1 </ ActiveCol >
</ Pane >
</ Panes >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
< Worksheet ss:Name ="Sheet2" >
< Table ss:ExpandedColumnCount ="0" ss:ExpandedRowCount ="0" x:FullColumns ="1"
x:FullRows ="1" ss:DefaultColumnWidth ="54" ss:DefaultRowHeight ="14.25" />
< WorksheetOptions xmlns ="urn:schemas-microsoft-com:office:excel" >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
< Worksheet ss:Name ="Sheet3" >
< Table ss:ExpandedColumnCount ="0" ss:ExpandedRowCount ="0" x:FullColumns ="1"
x:FullRows ="1" ss:DefaultColumnWidth ="54" ss:DefaultRowHeight ="14.25" />
< WorksheetOptions xmlns ="urn:schemas-microsoft-com:office:excel" >
< ProtectObjects > False </ ProtectObjects >
< ProtectScenarios > False </ ProtectScenarios >
</ WorksheetOptions >
</ Worksheet >
</ Workbook >
输出结果为:
Array ( [listed_SC] => Array ( [0] => 60001 [1] => 60002 [2] => 60004 ) [operationType] => Array ( [0] => A [1] => B [2] => G ) )