文件解析器使用SOPutDataCell和SOPutTextCell功能输出电子表格中单元格的内容(数据或文本)。在输出单元格数据之前,文件解析器必须通过使用带有SOINFO_COLUMNRANGE值的SOGetInfo函数来获取要输出的列的范围。当SOGetInfo返回时,其【PINFO】参数的低位字标识第一列数据以生成输出,高位字标识最后一列。文件解析器只能调用SOGetInfo调用范围内的单元格SOPutDataCell或SOPutTextCell.当列的范围内没有更多的数据时,文件解析器必须使用SO_EOFBREAK或SO_SECTIONBREAK值调用SOPutBreak函数(以适用者为准)。必须对文档中的每个列的范围进行此操作。
例如,如果第一列为10,最后一列为19,则过滤器将从当前位置读取该文件,但对于属于第10列至第19列的单元格,仅调用SOPutDataCell或SOPutTextCell.(列号为零。)解析器跳过属于此范围之外的列的单元格。过滤器必须在范围内生成【所有】列的单元格,如有必要,填充空单元格。如前所述,过滤器继续,直到SOPutBreak返回SO_STOP值。
一般来说,文件解析器应该执行以下步骤:
1.确定所需的色谱柱范围。
2.确定输入文件中可用的下一个单元格。
3.如果单元格不在列的给定范围内,请跳至步骤2。
4.如果单元格不为空,请使用当前数据调用SOPutDataCell或SOPutTextCell.否则,请调用SOPutDataCell以获取SO_CELLEMPTY类型的单元格。
5.更新局部变量,例如行号和列号。
6.使用SO_CELLBREAK值调用SOPutBreak.
7.如果SOPutBreak返回SO_STOP值,则从VwStreamReadFunc函数返回。
8.如果在下一部分的开头,请使用SO_SECTIONBREAK值调用SOPutBreak并返回。
9.如果档案结尾处,请调用SOPutBreak,并返回SO_EOFBREAK值。
10.重复步骤2到10。
当文件夹中的各种查找位置的本地数据保存时,它将在SOPutBreak内,当休息时间为SO_CELLBREAK类型时。因此,当文件解析器将其本地数据恢复为随机查找位置时,数据将在其对当前单元格范围内的前一个块的最后一个单元的调用期间反映文件解析器的状态(989796056)。在为每个单元格调用SOPutBreak之前,应该更新解析器完成的任何跟踪,例如当前行号。
在每次调用VwStreamReadFunc功能时,【dwExtraData】指定的列的每个水平范围最终都必须通过调用SOPutBreak(SO_EOFBREAK或SO_SECTIONBREAK值)(以适用者为准)终止。中断类型取决于输入文件。文件解析器不能在文件的末尾放一个分节符,当然,文件结束(EOF)中断也不会发生在文件实际的任何地方。
例如,如果输入文档包含30列宽的单个电子表格,则显示引擎可以使用三个不同的列范围调用解析器:0到11,12到23和24到29。文件解析器调用SOPutBreak EOF中断三次,每次在处理给定范围时到达文件的末尾。
当使用分节符调用SOPutBreak时,文件解析器必须确保查找位置位于下一个部分__的开头,即下一次调用VwStreamSectionFunc时文件解析器所需的文件位置。任何对SOPutBreak进行分节的电话可能是设置下一部分顶部的查找位置的一个。