您的位置:首页 > 其它

使用 text_io 输出成 excel 格式的突破性发现(SLK)

2010-11-17 09:58 239 查看

[标题]使用 text_io 输出成 excel 格式的突破性发现(SLK)

[发贴人]armok
[分类]FORM分类.输出成EXCEL
--------------------------------------------
到目前为止,我认为 text_io 输入成 excel 文件,是唯一可以满足 c/s 及 b/s 方式下的应用,并且,编程量非常小,排错也很容易。

但目前,只能实现文本单元格,公式等。如果表达文字格式,如指定字体号,对中等,我还找不到方法。

刚才在试验excel的导出格式时,无意发现一种很古老的slk格式,可以满足这个要求。

以下是使用 slk 的例子:

------------這個圖片已經看不到了----------------


-----------------------------------------------------

它的详细内容为:

ID;PWXL;N;E
P;PGeneral
P;P0
P;P0.00
P;P#,##0
P;P#,##0.00
P;P#,##0;;/-#,##0
P;P#,##0;;[Red]/-#,##0
P;P#,##0.00;;/-#,##0.00
P;P#,##0.00;;[Red]/-#,##0.00
P;P"$"#,##0;;"$"/-#,##0
P;P"$"#,##0;;[Red]"$"/-#,##0
P;P"$"#,##0.00;;"$"/-#,##0.00
P;P"$"#,##0.00;;[Red]"$"/-#,##0.00
P;P0%
P;P0.00%
P;P0.00E+00
P;P##0.0E+0
P;P#/ ?/?
P;P#/ ??/??
P;Pyyyy/m/d
P;Pd/mmm/yy
P;Pd/mmm
P;Pmmm/yy
P;Ph:mm/ AM/PM
P;Ph:mm:ss/ AM/PM
P;Ph:mm
P;Ph:mm:ss
P;Pyyyy/m/d/ h:mm
P;Pmm:ss
P;Pmm:ss.0
P;P@
P;P[h]:mm:ss
P;P_ "$"* #,##0_ ;;_ "$"* /-#,##0_ ;;_ "$"* "-"_ ;;_ @_
P;P_ * #,##0_ ;;_ * /-#,##0_ ;;_ * "-"_ ;;_ @_
P;P_ "$"* #,##0.00_ ;;_ "$"* /-#,##0.00_ ;;_ "$"* "-"??_ ;;_ @_
P;P_ * #,##0.00_ ;;_ * /-#,##0.00_ ;;_ * "-"??_ ;;_ @_
P;P/$#,##0_);;/(/$#,##0/)
P;P/$#,##0_);;[Red]/(/$#,##0/)
P;P/$#,##0.00_);;/(/$#,##0.00/)
P;P/$#,##0.00_);;[Red]/(/$#,##0.00/)
P;Pm/d/yy
P;Pyyyy"年"m"月"d"日"
P;Ph"时"mm"分"
P;Ph"时"mm"分"ss"秒"
P;Pyyyy"年"m"月"
P;Pm"月"d"日"
P;P上午/下午h"时"mm"分"
P;P上午/下午h"时"mm"分"ss"秒"
P;P"是";;"是";;"否"
P;P"真";;"真";;"假"
P;P"开";;"开";;"关"
P;F宋体;M240
P;F宋体;M240
P;F宋体;M240
P;F宋体;M240
P;E宋体;M240
P;E宋体;M240
P;E宋体;M240
P;E宋体;M240
P;E宋体;M240
P;E宋体;M180
P;ETimes New Roman;M240
P;ETimes New Roman;M240;L11
P;E宋体;M240;SU;L13
P;E宋体;M240;SU;L37
P;ETimes New Roman;M360;L11
P;E黑体;M360;L11
F;P0;DG0G8;M285
B;Y1;X2;D0 0 0 1
O;L;D;V0;K47;G100 0.001
F;W1 1 14
F;M510;R1
F;P0;FG0C;Y1;X1
C;K"这是对中"
F;SM16;X2
C;K"红色"
E

不要被这么长的代码吓倒,真正有用的是后面几句话。前面的都是通用的声明,完全可以做成一个过程。

但我一时找不到有关slk的说明文档。谁可以找到?

如果这个问题解决,将是forms的报表及数据导出的一个很大的突破。

以上slk文件,可以从这里下载。使用excel可直接打开,如果使用记事本打开,就是以上代码。
大家可以在在excel修改这个文件,然后存盘看看有什么变化。

------------------------------------------------

[回复人]armok
--------------------------------------------
经过半天的测试及研究,终于彻底了解SLK这种格式。资料整理如下:

(原创,如需要转载,请注明作者及出处)。

B 单元分隔

C 数据单元

E 文件的结尾

F 单元格式参数

ID SLK文件的标识记录

P 时间日期格式

W 列宽

X 水平坐标

Y 垂直坐标

第一行必须是ID

P 记录必须跟着ID

B记录必须跟着P

;D 或 :G 必须出现在C记录

最后必须以E结尾

举例如下(将 ---所在的行 删除后,这个SLK格式可直接使用,它是最简化的格式):

----至少保留这两行

ID;PWXL;N;E
P;PGeneral

----第一行P;E 是全部内容的缺省字体及字号。M为字号,
---- L为颜色,1黑 2无 3红 4绿 5深蓝 6黄 7洋红 8天兰 9黑 10无
---- 第2行开始可为后面调用,第二行的表达式为SM1

P;E黑体;M260
P;E黑体;M960;L5
P;E黑体;M360
P;E黑体;M960

---- 定义列宽,分别是1至4列

F;W1 1 14
F;W2 2 24
F;W3 3 34
F;W4 4 10

C;Y1;X1;K"Name"
C;Y1;X2;K"Title"
C;Y1;X3;K"Salary"
C;Y1;X4;K"Linenumber"
C;Y2;X1;K"Jari"
C;Y2;X2;K"Programmer"
C;Y2;X3;K"Less"
C;Y2;X4;K 1
C;Y3;X1;K"Michael"

-- FG0C 对中 FG0R 对右 SM

F;FG0C;SM1;Y3;X2
C;K"Boss"

C;Y3;X3;K"More"
C;Y3;X4;K2
E

关于公式的补充

C;X3;K12;ERC[-2]*RC[-1] 表示等于左边2格与左边1格的相乘。
R[-1]C[-2] 表示左边一行及左边两列
RC[-1] 表示同一行及左边一列

SLK格式的限制

SYLK(符号链接)格式
按照 SYLK(符号链接)(*.slk )格式,只能保存活动工作表中的数值和公式,以及有限的单元格格式。

可以保存所有的数据行,每个单元格最多可以保存 255 个字符。

如果 Microsoft Excel 中包含 SYLK 格式不支持的函数,Microsoft Excel 将在保存文件之前计算这些函数,并以计算结果数值替换公式本身。

绝大部分的文本格式都将保存;转换后的文本将采用单元格中第一个字符的文本格式。旋转的文本、合并的单元格,以及文本的水平及垂直对齐设置均将失效。如果在 Microsoft Excel 中重

新打开转换后的 SYLK 工作表,其中的字体颜色可能转换为其他的颜色。边框将转换为单直线边框。单元格底纹将转换为灰色底纹。

由“页面设置”对话框(“文件”菜单)指定的大部分设置和人工分页符都将失效。

保存单元格批注;如果在 Microsoft Excel 中重新打开转换后的 SYLK 工作表,可以显示这些单元格批注。

图形、嵌入式图表、对象、窗体控件、超级链接、有效数据设置、条件格式和工作表的其他属性将失效。

Visual Basic 应该程序代码失效。

保存数据透视表报表当前视图中所显示的数据;而所有其他数据透视表报表数据将全部丢失。

如果转换的是由 Microsoft Excel for Macintosh 1.5 或以前版本生成的文件,请单击“工具”菜单中的“选项”命令,清除对话框中“重新计算”选项卡上的“1904 年日期系统”复选框,然后在保存文件之前确保所有数据均可见。

-------------------------------------------

范例:

ID;PWXL;N;E

P;PGeneral

P;E黑体;M260

P;E黑体;M960;L5

P;E黑体;M360

P;E黑体;M960

F;W1 1 14

F;W2 2 24

F;W3 3 34

F;W4 4 10

C;Y1;X1;K"Name"

C;Y1;X2;K"Title"

C;Y1;X3;K"Salary"

C;Y1;X4;K"Linenumber"

C;Y2;X1;K"Jari"

C;Y2;X2;K"Programmer"

C;Y2;X3;K"Less"

C;Y2;X4;K 1

C;Y3;X1;K"Michael"

F;FG0C;SM1;Y3;X2

C;K"Boss"

C;Y3;X3;K"More"

C;Y3;X4;K2

E

将以上内容贴后一个文本里。注意,第一行不能是空行。要以ID开头。

再将你的文本改成 slk后缀就可以用excel直接打开了。

不过,有点遗憾的是,这种SLK格式不支持底色,也不支持单元格合并。(详细见上面的说明)

不过,能够向左向右及对中,及可以设置字号与字体颜色,我已经很满意的啦。

--------------------------------------------
本文整理并转载自:阿莫OracleDeveloper论坛
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: