BIFF5 - Excel - 工作簿流问题(损坏的文件) [英] BIFF5 - Excel - Workbook Stream Problems (corrupt file)

查看:189
本文介绍了BIFF5 - Excel - 工作簿流问题(损坏的文件)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用我的FireFox扩展中的javascript成功地写入Excel文件。我可以得到格式和我想要的内容,但是我遇到了障碍。

为了添加格式,我必须将EOF的工作簿Globals Stream和BOF工作表流。当我这样做Excel表示文件已损坏。





 <$ c我正在写这些记录的文件

$ WINDOW1记录
1904记录
FONT记录(x7)
XF记录(x17)
记录
EOF记录
BOF记录(0x10 [Worksheet])
LABEL记录
EOF记录

然而,当我在Excel中打开文件时,它说这是损坏的,当我在OpenOffice中打开它时,它加载文件就好了,当我用ExcelFile Workbook查看器打开它时,看到的记录都很好。


$ b 这是我在文件开头写的代码:

  excelData [excelData.length] = pack(vvvvvv,0x809,0x08,0x0500,0x05,0x096c,0x07c9); // BOF Workbook 

excelData [excelData.length] = pack(vvvvvvvvvvv,0x003D,0x0012,0x0000,0x0000,0x25BC,0x1572,0x0038,0x0000,0x0000,0x0001,0x0258); // WINDOW1
excelData [excelData.length] = pack(vvv,0x0022,0x0002,0x0000); // 1904

excelData [excelData.length] = pack(vv,0x0031,0x0F + 7);
excelData [excelData.length] = pack(vvvvvCCCCC,0x00C8,0x0001,0x0000,0x0190,0x0000,0x0200,0x00,0x01,0x00,7); // calibri 10 normal - index 0
excelData [excelData.length] =Calibri;
excelData [excelData.length] = pack(vv,0x0031,0x0F + 7);
excelData [excelData.length] = pack(vvvvvCCCCC,0x00C8,0x0001,0x0000,0x02BC,0x0000,0x0200,0x00,0x01,0x00,7); // calibri 10 bold - index 1
excelData [excelData.length] =Calibri;
excelData [excelData.length] = pack(vv,0x0031,0x0F + 7);
excelData [excelData.length] = pack(vvvvvCCCCC,0x00C8,0x0001,0x0000,0x02BC,0x0000,0x0200,0x00,0x01,0x00,7); // calibri 10 bold - index 2
excelData [excelData.length] =Calibri;
excelData [excelData.length] = pack(vv,0x0031,0x0F + 7);
excelData [excelData.length] = pack(vvvvvCCCCC,0x00C8,0x0001,0x0000,0x02BC,0x0000,0x0200,0x00,0x01,0x00,7); // calibri 10 bold - index 3
excelData [excelData.length] =Calibri;
excelData [excelData.length] = pack(vv,0x0031,0x0F + 7);
excelData [excelData.length] = pack(vvvvvCCCCC,0x00C8,0x0001,0x0000,0x02BC,0x0000,0x0200,0x00,0x01,0x00,7); // calibri 10 bold - index 5
excelData [excelData.length] =Calibri;
excelData [excelData.length] = pack(vv,0x0031,0x0F + 7);
excelData [excelData.length] = pack(vvvvvCCCCC,0x00C8,0x0001,0x0000,0x02BC,0x0000,0x0200,0x00,0x01,0x00,7); // calibri 10 bold - index 6
excelData [excelData.length] =Calibri;
excelData [excelData.length] = pack(vv,0x0031,0x0F + 7);
excelData [excelData.length] = pack(vvvvvCCCCC,0x00C8,0x0001,0x0000,0x02BC,0x0000,0x0200,0x00,0x01,0x00,7); // calibri 10 bold - index 7
excelData [excelData.length] =Calibri;

$ b excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0000,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0xFFF5,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0000,0x0000,0x0001,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了?
excelData [excelData.length] = pack(vvvvvvvvvv,0x00E0,0x0010,0x0006,0x0000,0x0001,0x0020,0x20C0,0x0000,0x0000,0x0000); // XF搞砸了? //用户定义





var L = 0;
for(var i = 0; i< excelData.length; i ++){
L = Number(L)+ Number(excelData [i] .length);
}
L = L + 27;

var data = pack(VvC,Number(L),0x0000,12); // BOUNDSHEET
data = data +数据表1;
excelData [excelData.length] = pack(vv,0x0085,data.length);
excelData [excelData.length] = data;


excelData [excelData.length] = pack(vv,0x0A,0x00); // EOF
excelData [excelData.length] = pack(vvvvvv,0x809,0x08,0x0500,0x10,0x096C,0x07C9); // BOF Worksheet

我真的怀疑问题在于BOUNDSHEET记录。不过,我也没有什么好运气的。任何帮助将不胜感激!



-Alex

解决方案

上面提到的Spreadsheet :: WriteExcel Perl模块的作者。

如果你发送给我其中一个损坏的文件我将为您进行调试,并让您知道问题所在。


I am successfully writing to an Excel file, using javascript from my FireFox extension. I can get the formatting, and contents that I want, however I have run into a roadblock.

In order to add the formatting, I have to EOF the Workbook Globals Stream, and BOF the worksheet stream. When I do that Excel says the file is corrupt.

I am currently writing to the file these records, in this order:

BOF Record (0x05 [Workbook])
WINDOW1 Record
1904 Record
FONT Record (x7)
XF Record (x17)
BOUNDSHEET Record
EOF Record
BOF Record (0x10 [Worksheet])
LABEL Record
EOF Record

However when I open the file in Excel it says it is corrupt, when I open it in OpenOffice it loads the document just fine, when I open it with ExcelFile Workbook viewer to see the records, all looks fine.

Here is the code that I am writing at the beginning of the file:

    excelData[excelData.length] = pack("vvvvvv", 0x809, 0x08, 0x0500, 0x05, 0x096C, 0x07C9); // BOF Workbook

excelData[excelData.length] = pack("vvvvvvvvvvv", 0x003D, 0x0012, 0x0000, 0x0000, 0x25BC, 0x1572, 0x0038, 0x0000, 0x0000, 0x0001, 0x0258); // WINDOW1
excelData[excelData.length] = pack("vvv", 0x0022, 0x0002, 0x0000); // 1904

excelData[excelData.length] = pack("vv", 0x0031, 0x0F+7);
excelData[excelData.length] = pack("vvvvvCCCCC", 0x00C8, 0x0001, 0x0000, 0x0190, 0x0000, 0x0200, 0x00, 0x01, 0x00, 7); // calibri 10 normal - index 0
excelData[excelData.length] = "Calibri";
excelData[excelData.length] = pack("vv", 0x0031, 0x0F+7);
excelData[excelData.length] = pack("vvvvvCCCCC", 0x00C8, 0x0001, 0x0000, 0x02BC, 0x0000, 0x0200, 0x00, 0x01, 0x00, 7); // calibri 10 bold - index 1
excelData[excelData.length] = "Calibri";
excelData[excelData.length] = pack("vv", 0x0031, 0x0F+7);
excelData[excelData.length] = pack("vvvvvCCCCC", 0x00C8, 0x0001, 0x0000, 0x02BC, 0x0000, 0x0200, 0x00, 0x01, 0x00, 7); // calibri 10 bold - index 2
excelData[excelData.length] = "Calibri";
excelData[excelData.length] = pack("vv", 0x0031, 0x0F+7);
excelData[excelData.length] = pack("vvvvvCCCCC", 0x00C8, 0x0001, 0x0000, 0x02BC, 0x0000, 0x0200, 0x00, 0x01, 0x00, 7); // calibri 10 bold - index 3
excelData[excelData.length] = "Calibri";
excelData[excelData.length] = pack("vv", 0x0031, 0x0F+7);
excelData[excelData.length] = pack("vvvvvCCCCC", 0x00C8, 0x0001, 0x0000, 0x02BC, 0x0000, 0x0200, 0x00, 0x01, 0x00, 7); // calibri 10 bold - index 5
excelData[excelData.length] = "Calibri";
excelData[excelData.length] = pack("vv", 0x0031, 0x0F+7);
excelData[excelData.length] = pack("vvvvvCCCCC", 0x00C8, 0x0001, 0x0000, 0x02BC, 0x0000, 0x0200, 0x00, 0x01, 0x00, 7); // calibri 10 bold - index 6
excelData[excelData.length] = "Calibri";
excelData[excelData.length] = pack("vv", 0x0031, 0x0F+7);
excelData[excelData.length] = pack("vvvvvCCCCC", 0x00C8, 0x0001, 0x0000, 0x02BC, 0x0000, 0x0200, 0x00, 0x01, 0x00, 7); // calibri 10 bold - index 7
excelData[excelData.length] = "Calibri";


excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0000, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0xFFF5, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0000, 0x0000, 0x0001, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up?
excelData[excelData.length] = pack("vvvvvvvvvv", 0x00E0, 0x0010, 0x0006, 0x0000, 0x0001, 0x0020, 0x20C0, 0x0000, 0x0000, 0x0000); //XF Messed up? // User Defined





    var L = 0;
for (var i=0; i<excelData.length; i++) {
    L = Number(L)+Number(excelData[i].length);
}
L = L+27;

var data = pack("VvC", Number(L), 0x0000, 12); // BOUNDSHEET
data = data+"data sheet 1";
excelData[excelData.length] = pack("vv", 0x0085, data.length);
excelData[excelData.length] = data;


excelData[excelData.length] = pack("vv", 0x0A, 0x00); // EOF
excelData[excelData.length] = pack("vvvvvv", 0x809, 0x08, 0x0500, 0x10, 0x096C, 0x07C9); // BOF Worksheet

I truly suspect the problem lies in the BOUNDSHEET record. However I am not having any luck figuring this one out either. Any help would be appreciated!

-Alex

解决方案

I am the author of the Spreadsheet::WriteExcel Perl module mentioned above.

If you send me one of the corrupt files I'll debug it for you and let you know what the issue is.

这篇关于BIFF5 - Excel - 工作簿流问题(损坏的文件)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆