请教:下面是一段生成EXCEL的代码,但是结果如图所示,请大家多多指教!

cyxin2121921 2009-06-02 11:57:06
<?php 
function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}

function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}

function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}

function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
}

if($_POST['daobaobiao'] == true){
$where = $_POST['drawingcode2'];

$str = implode(",",$_POST['chek']);


include_once("pdmdblogon.php");
$sql = "select ".$str." from XTDETAMSALL_DETAIL_2 where UPCODE = '$where'";
$stmt = ociparse($conn,$sql);
if(!$stmt){echo "ERROR - Could not parse SQL statement."; exit;}
$result = ociexecute($stmt);

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=$where.xls ");
header("Content-Transfer-Encoding: binary ");

xlsBOF();


foreach($_POST['chek'] as $key => $value){
++$i;
xlsWriteLabel(1,$i,$value);
}
$xlsRow = 2;


while(ocifetchinto($stmt,$row,OCI_ASSOC)) {
$ii=1;
$keys = (array_values($row));
foreach ($keys as $v){
xlsWriteLabel($xlsRow,$ii,$v);
$ii+=1;
}

$xlsRow+=1;
}


xlsEOF();
exit();
}
?>


这个图所对应生成的excel为《总共四条记录,可全部导出》
CINVCODE	YONGYOU	CHANGERATE	INVCOST	SJYL	DXCB	UPCODE	UPNAME
1020800260 02060042 1 4 0 0 TSK202B-11-11-100 渡板组成
1021000271 02400103 1 4.7 0 0 TSK202B-11-11-100 渡板组成
1021000281 02050504 1 4.7 0 0 TSK202B-11-11-100 渡板组成
1000000011 06303001 1 9 7825 752 TSK202B-11-11-100 渡板组成


而这个图则出现了如下结果:《共一千多条记录,但是只能导出下面几条结果来》
CINVCODE	YONGYOU	CHANGERATE	INVCOST	SJYL	DXCB	UPCODE	UPNAME
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成
0 0 0 0 TSK254-10-00-000 车体组成

请问在这个导出excel程序中,为何会出现这样的结果,不能全部导出来呢?
...全文
174 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyxin2121921 2009-06-08
  • 打赏
  • 举报
回复
少了Cells.NumberFormat.Local = "@"
cyxin2121921 2009-06-04
  • 打赏
  • 举报
回复
还有这个问题:在有些字段“01000203”这个应该是一个字符串,但是它的开头为0,所以在excel中显示出来的结果就丢掉了这个0。
outou 2009-06-04
  • 打赏
  • 举报
回复
俺也不会,只有学习
cyxin2121921 2009-06-04
  • 打赏
  • 举报
回复
<?php include "include/pdmdblogon.php";?>
<html>
<head>
<title>将Web页面中的数据导出到Excel</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="css/style.css" rel="stylesheet">
<style type="text/css">
<!--
body {
margin-top: 0px;
}
-->
</style></head>
<body>
<table align="center" cellpadding="0" cellspacing="0">
<tr>
<td>
<table id="tablemake" border="0" cellpadding="0" cellspacing="1" bordercolorlight="#FFFFFF" bordercolordark="#CCCCCC" bgcolor="#000000">
<tr align="center" bordercolor="#CCCCCC" bgcolor="#EEEEEE">
<td width = 50 height="30">序号</td>
<td width = 100>领料单位</td>
<td width = 150>新物料码</td>
<td width = 150>用友码</td>
<td width = 150>属装图号</td>
<td width = 250>图号</td>
<td width = 250>图名</td>
<td width = 50>件号</td>
<td width = 250>材料</td>
<td width = 150>定额</td>
<td width = 220>下料尺寸</td>
<td width = 50>利用率</td>
<td width = 100>数量</td>
<td width = 50>计量单位</td>
<td width = 150>工艺分工</td>
<td width = 150>自制/外购</td>
</tr>
<?php

$i = 0;

while($detail[11][$i])
{
//为奇偶行赋不同的颜色
if($i%2 == 1)
{
?><tr BGCOLOR="#EBEBEB"><?php
}
else
{
?><tr BGCOLOR="#DBDBDB"><?php
}

echo "<td align=center NOWRAP>";//序号
echo $i+1;//序号是自动加1
echo "</td>";

echo "<td align=center NOWRAP>";//领料单位
echo $detail[30][$i];
echo "</td>";

echo "<td align=center NOWRAP>";//新物料码
echo $detail[13][$i];
echo "</td>";

echo "<td NOWRAP>";//用友码
echo $detail[12][$i];
echo "</td>";

echo "<td>";//属装图号
echo $detail[3][$i];
echo "</td>";

echo "<td NOWRAP>";//图号
echo $detail[1][$i];
echo "</td>";

echo "<td NOWRAP>";//图名
echo $detail[2][$i];
echo "</td>";

echo "<td NOWRAP>";//件号
echo $detail[4][$i];
echo "</td>";

echo "<td NOWRAP>";//材料
echo $detail[5][$i];
echo "</td>";

echo "<td NOWRAP>";//定额
echo $detail[29][$i];
echo "</td>";

echo "<td NOWRAP>";//下料尺寸
echo $detail[28][$i];
echo "</td>";

echo "<td NOWRAP>";//利用率
echo $detail[22][$i];
echo "</td>";


echo "<td NOWRAP>";//数量
echo $detail[8][$i];
echo "</td>";

echo "<td NOWRAP>";//计量单位
echo $detail[24][$i];
echo "</td>";

echo "<td NOWRAP>";//工艺分工
echo $detail[10][$i];
echo "</td>";

echo "<td NOWRAP>";//自制外购
echo $detail[42][$i];
echo "</td>";

echo "</tr>";//行

$i++;
}
?>
</table>
<table width="82%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="25" align="right"><a href="#" onClick="outExcel();">导出到Excel</a></td>
</tr>
</table>
</td>
</tr>

</table>
</body>
</html>
<script language="javascript">
function outExcel(){
var table=document.all.tablemake;
row=table.rows.length;
column=table.rows(1).cells.length;
var excelapp=new ActiveXObject("Excel.Application");
excelapp.visible=true;
objBook=excelapp.Workbooks.Add(); //添加新的工作簿
var objSheet = objBook.ActiveSheet;
for(i=1;i<row+1;i++){
for(j=0;j<column;j++){
objSheet.Cells(i+1,j+1).value=table.rows(i-1).cells(j).innerHTML.replace(" ","将Web页面中的数据导出到Excel");
}
}
excelapp.UserControl = true;
}
</script>

在生成的excel中为什么当为“09”的时候得结果会是“9”(领料单位字段),而应该是“09-10”的结果,却显示出来的结果为“9月10日”(工艺分工字段),而为“02-09-10”的显示结果为“2010-2-9”(工艺分工字段),并且这个字段似乎都是按照日期进行显示的,请问我该如何纠正这个问题?按照正确形式显示?
cyxin2121921 2009-06-04
  • 打赏
  • 举报
回复
我终于发现为啥不能全部选择出来的原因就是我没有从数据库中把相关节点信息茶出来,需要循环查询数据库才可以!

我现在出现了一个问题,我想问一下,我有一个字段:里面的内容为“09-10”“0-53-09-10”等
他们是字符串的形式,但是在excel中“09-10”为何显示了年份,9月10,而不是09-10的显示形式;53-09-10”这个则可以正常显示,但是我发现在excel的左上角上有一个小三角,发现他们是日期格式的,请问这种情况我该如何去修改?
是在程序中进行修改还是在excel中进行格式修改?才可以按照我想要的格式进行显示?

fxs_2008 2009-06-03
  • 打赏
  • 举报
回复
版主是说输出一个html的table字串,输出时同时提示IE用EXCEL打开

EXCEL打开html会将表格识别出来
cyxin2121921 2009-06-03
  • 打赏
  • 举报
回复
那能否给个例子呢?
xuzuning 2009-06-03
  • 打赏
  • 举报
回复
先确保查询结果是正确的

其实输出为 EXCEL 并不需要那么麻烦
只需要用HTML的表格标记书写输出结果就可以了
littlebirds 2009-06-03
  • 打赏
  • 举报
回复
楼主先将数据echo出来,看看对不对
littlebirds 2009-06-03
  • 打赏
  • 举报
回复
  header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=".$lotid.".csv");

echo "*************************************************************************\n";

大概类似如此的吧。。。
cyxin2121921 2009-06-03
  • 打赏
  • 举报
回复
就是五楼中提出的那种方法
不知道谁有相关事例?
cyxin2121921 2009-06-02
  • 打赏
  • 举报
回复
这个在IE下不能用?
fxs_2008 2009-06-02
  • 打赏
  • 举报
回复
这个程序只在GB下能用
你可以echo看看数据,最出的对不对,然后再看看写入的对不对
cyxin2121921 2009-06-02
  • 打赏
  • 举报
回复
没有人指教吗?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧