免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享

【求助】怎样读取excel数据?

本文来自:★flash之路-flash技术交流★ 转帖请注明出处! 作者:bbb7691 您是第4787个浏览者

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
flashroad友情提示:
“点评”不是“回帖”!

【求助高手】怎样读取excel数据?

百度了一下,下面这个读取的是字符,我想读数值,可以运算的~~

var excelXml:XML;

var loader=new URLLoader();

loader.addEventListener(Event.COMPLETE,loadComplete);

loader.load(newURLRequest("data.xls"));

function loadComplete(e:Event):void {

excelXml=new XML(e.target.data);

readData(excelXml);

}

function readData(xml:XML) {

var ns=xml.namespace();

var rows=xml..ns::Row;

for each (var r in rows) {

  var cellData=r.ns::Cell.ns::Data.text();

  var str:String = "";

  for each (var d in cellData) {

   str+=d+",";

   }

  trace(str);

}

}

貌似读取数值要xml,举例子:

我excel表是酱紫的:


      A          B          C           D

1 姓名        性别       学号       成绩

2 小米         男           1         100

3 小猴         女           2           80


如何用as3 读取到呢?(成绩那是要数值哦)要转换xml么?

谢谢~~~~~





您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.

友情提示:单击下列任意一个表情,即可瞬间自动回复本帖!

好贴......
郁闷......
开心......
擦汗......
鄙视......
狂怒
谢谢
爱你呦
拜托了
嗯嗯
OMG
求关注
伤心......
无奈.....
无奈.....
无奈.....
无奈.....
无奈.....
哈哈哈
NO
OK
what
我来了

最近访问本帖者列表:

点评
B Color Smilies

您还可以输入:个字符
X

X

佛山乌蝇脚

怎么可能? 你确定可以读取?
我用上述代码测试会报错

建议将数据制作成xml格式的进行处理
如果铁了心的要用excel,注意,不要用新版的xlsx格式的,而要用旧版的xls格式的
具体如何实现,我帮不了你
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

TOP

本帖最后由 网雨霏霏 于 2016-6-8 12:57 编辑

从这里找到一个源码:
http://code.google.com/p/as3xls/
注意:因为谷歌被大陆封印,上述网址需要翻墙才可浏览

如果你无法访问,下载下面的文件【我从上面网址内下载的文件】:
http://pan.baidu.com/s/1nvITDhR 【提取码: p4cr
内含swc文件 以及纯英文的帮助文件  看得我云里雾里的  貌似也没有例子【我是没找到】
你下载研究研究看看吧

下面的是上述网址的作者的简述:



Introduction

Some time ago I was working on a little project for which I wanted to read and write Excel files in Flex. I Googled hither and yon but sadly I could only find a sample someone tossed out there sans code. So, I put together a little package to read and write Excel files. So far it supports reading text, numbers, formulas, and dates from Excel version 2.x-2003 and writing text, numbers, and dates. Formulas also update to reflect changes in cells they reference.

The API is intended to be straightforward and easy to use. There are some samples to play with and the obligatory ASdocs



简而言之:
【1】本类库是为flex【现已更名为flashBuilder,也是创建swf文件的利器。但是纯代码的,与flashIDE差别甚大】开发的。
flashIDE应该也可以用,具体如何操作我就不晓得了
【2】本类库仅支持2003及更加古老的版本的excel创建的xls文件
【3】本类库可以读取xls文件内的如下信息: 文本、数字、公式
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

TOP

回复 3# 网雨霏霏

那个代码我试过是可以滴,只不过输出的是字符,和读取txt的一样,没有。那如果把数据用excel录入,然后保存成为xml,可以吗?
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

佛山乌蝇脚

TOP

回复 4# bbb7691


    为何在我这里测试的时候 报错?
用excel打开xls文件   文件 另存为
可以保存为xml格式
不过,无用的信息太多。 需要手动删除许多,才可以使用
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

TOP

回复 5# 网雨霏霏


XMLData.xml文件是酱紫的:<student>
<name>Thyme</name>
<age>18</age>
<score>
<English>94</English>
<Physics>86</Physics>
<Chemistry>99</Chemistry>
</score>
<grade>B</grade>
</student>


as3是酱紫的:
var myXML:XML;
var loader:URLLoader = new URLLoader(new URLRequest("XMLData.xml"));
loader.addEventListener(Event.COMPLETE,completeHandler);
function completeHandler(e:Event)
{

var getLoader:URLLoader = e.target as URLLoader;

if (getLoader!=null)

{

myXML = new XML(getLoader.data);

trace(myXML.child(0));

trace(myXML.child(2).child(1));

trace(myXML.child(2).child(1)+1);

}

else

{

trace("加载失败!");

}
}


输出是
Thyme
86
861
读取的只是字符,不是数值。如何读取数值?
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

佛山乌蝇脚

TOP

本帖最后由 网雨霏霏 于 2016-6-12 16:21 编辑

回复 6# bbb7691


    AS3可以直接读取xml数据 不用child
然后,你如果确定是String类型的,可以用神马强制转换为数字类型

神马有三种情况:
如果,确保数字是正整数,神马就是uint
如果,数字是整数,但可能有负值,神马就是int
如果,数字会出现小数,神马就是Number


具体代码如下:





var wuli:uint//这是新增的一个uint数据类型
var myXML:XML;
var loader:URLLoader = new URLLoader(new URLRequest("XMLData.xml"));
loader.addEventListener(Event.COMPLETE,completeHandler);
function completeHandler(e:Event)
{
var getLoader:URLLoader = e.target as URLLoader;
if (getLoader!=null)
{
myXML = new XML(getLoader.data);
trace(myXML.name);
wuli=myXML.score.Physics//这里相当于进行了强制转换,不过是隐式的
//wuli=uint(myXML.score.Physics)这是显式的强转
trace(wuli,wuli+1);
}
else
{
trace("加载失败!");
}
}






另外,你这个xml文件只有一个<student>的节点,也就是只有一个人。但其实正常情况下应该有多个人吧。
<student>在这里充当了根节点【每一个xml文件都必须 有且只有一个根节点】
所以,你的xml文件的结构需要改一改。形如下面酱紫:

<学生数据>
<student>
<name>Thyme</name>
<age>18</age>
<score>
<English>94</English>
<Physics>86</Physics>
<Chemistry>99</Chemistry>
</score>
<grade>B</grade>
</student>
<!-- 与上面一样的写法,书写第二个student节点-->
<!-- 与上面一样的写法,书写第三个student节点-->
<!-- ........-->
</学生数据>

那么,调用的时候,要获取第一个人的英语成绩:
uint(myXML.student[0].score.English)
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

TOP

太好了,我昨天研究了一个下午,现在马上试试~~
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

佛山乌蝇脚

TOP

回复 7# 网雨霏霏

高手,我问题又来了。我xml是酱紫的:
<cl>

<student>

<name>A</name>

<score>100</score>

</student>

<student>

<name>B</name>

<score>50</score>

</student>

<student>

<name></name>

<score></score>

</student>

<student>

<name>D</name>

<score>80</score>

</student>
</cl>

flash中有三个文本框Input  out1   out2
现在我已经能实现在Input中输入数字(作为学号吧),就能在另两个框中显示相应的name和score。

sname = String(mData.student[num - 1].name);
sscore = int(mData.student[num - 1].score);
//num是学号

问题出现了:1、我只有4个人的名单,如果我输入的数字不是1-4,咋办?如:0、5、6……,如何实现当输入这些数字的时候输出框显示“无此人”?baidu了一下,有个方法是在xml中加上
<student amount="4">,但这个方法好像很麻烦,有其他方法么?
                  2、xml中第3个没人的,同样想实现输出框显示“无此人”。
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

佛山乌蝇脚

TOP

本帖最后由 网雨霏霏 于 2016-6-14 21:46 编辑

回复 9# bbb7691


  1. var namesz: Array = new Array()
  2. var scoresz: Array = new Array()
  3. var geshu: uint
  4. var myXML: XML;
  5. var loader: URLLoader = new URLLoader(new URLRequest("XMLData.xml"));
  6. loader.addEventListener(Event.COMPLETE, completeHandler);
  7. function completeHandler(e: Event) {
  8.         var getLoader: URLLoader = e.target as URLLoader;
  9.         if (getLoader != null) {
  10.                 myXML = new XML(getLoader.data);

  11.                 geshu = myXML.student.length()
  12.                 for (var i: uint; i < geshu; i++) {
  13.                         namesz[i] = myXML.student.name[i]
  14.                         scoresz[i] = myXML.student.score[i]

  15.                 }
  16.                 trace(namesz, scoresz)
  17.         } else {
  18.                 trace("加载失败!");
  19.         }
  20. }



  21. btn.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);

  22. function fl_MouseClickHandler(event: MouseEvent): void {
  23.         var suoyin: uint = uint(input.text)

  24.         if (suoyin <= geshu) {
  25.                 if (namesz[suoyin - 1] != "") {
  26.                         out1.text = namesz[suoyin - 1]
  27.                         out2.text = scoresz[suoyin - 1]
  28.                 } else {
  29.                         out1.text = "无此人"
  30.                         out2.text = ""
  31.                 }
  32.         } else {
  33.                 out1.text = "无此人"
  34.                 out2.text = ""
  35.         }

  36. }
复制
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

TOP

临时做的fla文件【用flashCC2014 或CS6可打开】



临时做的fla文件【用flashCC2014 或CS6可打开】
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
点评
B Color Smilies

您还可以输入:个字符
X

X

TOP

回复 11# 网雨霏霏

啊啊~~无限感激~~
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

佛山乌蝇脚

TOP

本帖最后由 网雨霏霏 于 2016-6-15 15:30 编辑

回复 12# bbb7691


    这几天比较忙  那个回复是昨晚发的  然后,昨晚的网络特别卡
只简单的给出了代码,也没有给注释

这里简要的一说

【1】这个代码无需在xml文件内专门书写节点的个数【调用length()方法可以动态的获取(代码12行,注意,这是一个方法,要在length后面带上小括号)】,前提是,你的xml文件的格式必须非常的规范【你写的就是很标准、很规范的】
因为后续编程时要用到这个个数,所以,必须先定义一个“全局变量”【代码第3行的geshu】,然后在12行那里将数字赋值给这个geshu

【2】由于数据有多个,用数组来存储是比较考靠谱的
所以,代码的1、2这两行定义了两个数组:第一行定义的数组存储的是名字【14行代码使用了for循环进行了赋值,如此这个namesz数组内就包含了所有的名字】
  第二行定义的数组存储的是分数【15行代码使用了for循环进行了赋值,如此这个scoresz数组内就包含了所有的分数】

又因为需要在按钮的代码中调用这些数据,所以这两个数组必须定义成“全局变量”


那么,我定义了三个全局变量,放到了代码的最顶部【说是全局,我认为不是很贴切,但大家都这样叫,我就随大流了。这里的全局指的是放在所有的函数体外部进行定义,而且是放在代码的最顶部定义的变量。这样一来,所有的函数体内部都可以直接调用


【3】26行往后的代码都是按钮上的代码【按钮的实例名我设为btn】
其中:29行  新增了一个名为suoyin的数字类型变量,用于存储用户输入的数字【这个就是局部变量了,只能在按钮的相应函数内部有效,在该函数外部进行访问都是无效的】
31行和39行 是同一个判断 如果用户输入的数字是在真实的范围内 执行32到38行内容 ,如果不在真实范围内,执行39到42行的内容

32行的判断分支35行 是用于解决你的 xml中第3个没人的,同样想实现输出框显示“无此人”。问题的

=========为了消除背景的影响===============



=========为了消除背景的影响===============


=========为了消除背景的影响===============


=========为了消除背景的影响===============
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

TOP

回复 13# 网雨霏霏

已经试过没问题了,还加了个“性别”。感觉已经初步适应as3的变量定义,就是那个神马。
谢谢啦~~~~~~~~~~
您所在的用户组只能看到部分内容.
如查看全部内容, 请先登录或者注册.
点评
B Color Smilies

您还可以输入:个字符
X

X

佛山乌蝇脚

TOP

 

B Color Image Link Quote Code Smilies
高级模式 | 发新话题

您需要登录后才可以回帖 登录|立即注册

快速
返回顶部
返回首页