Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4997994
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类:

2007-12-19 11:00:15

一:
项目目的,通过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,
                         遇到任意结束标记(     (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;
}
?>

读取的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="">
 <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 ) )

阅读(4017) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~