【发布时间】:2014-08-26 12:30:56
【问题描述】:
德尔福 XE6。我有一个文本 sn-ps 应用程序,它存储在本地数据库 (ABS DB) 中。一些 sn-ps 可能是纯文本,其他可能包含格式。如果 sn-ps 包含格式,则 sn-ps 是 MS Word 格式。
用户可以通过两种方式查看 sn-ps,在我的应用程序中,或者通过调用 MS-Word,并在其中自动加载 sn-p,- 这是相同的 SNIPPET ..
问题:如果将 sn-p 加载到我的应用程序中的 TOLEContainer 中,它会正常显示而没有问题...如果 sn-p 生成到 MSWord 中,我会收到错误...
“很抱歉。我们无法打开,因为我们发现其内容有问题。”我点击确定,然后得到“Word 在 中发现不可读的内容。您要恢复此文档的内容吗?...”我点击确定,一切正常。
我对“生成 MS WORD”的一般处理流程是......
// FN is a temp file name
FileStream := TFileStream.Create(FN, fmCreate);
BlobStream := dm_text.tEntries.CreateBlobStream(dm_text.tEntries.FieldByName('ANSWER_FMT'), bmRead);
FileStream.CopyFrom(BlobStream, BlobStream.Size);
BlobStream.Free;
FileStream.Free;
// Now open default association, which will be Word
ShellExecute(Handle, 'open', PWideChar(FN), nil, nil, SW_SHOWNORMAL);
除了 TOleContainer 的一些命令之外,该流程几乎与就地查看相同。
OleWord.Enabled := True;
FileStream := TFileStream.Create(FN, fmCreate);
BlobStream := tEntries.CreateBlobStream(tEntries.FieldByName('ANSWER_FMT'), bmRead);
FileStream.CopyFrom(BlobStream, BlobStream.Size);
BlobStream.Free;
FileStream.Free;
OleWord.LoadFromFile(FN);
OleWord.DoVerb(ovInPlaceActivate);
任何想法为什么会发生这种情况?这发生在多个版本的 MSWord 上。
附加信息: 两个例程都查看相同的数据,这些数据是从我的数据库中完全相同的行/列中提取的。我所做的是创建一个 TEMP 文件,然后通过 TOleContainer 加载它,它可以很好地加载它,或者通过 ShellExecute,它会给出一个错误。但是,如果我手动将 OLE 容器的 TEMP 文件加载到 MSWord 中,我会得到同样的错误。
所以-可能性... 1)。我的数据已损坏,即我如何保存它是错误的……但 Word 可以更正它。 2)。我有一个设置,以便 OLEContainer 不显示错误,但 Word 会显示。
【问题讨论】:
-
我在问题中添加了其他信息......但是,通过 Ole Automation 加载它可能会“隐藏”错误。数据很好。 Word 只是出于某种原因在抱怨。
-
如何发布二进制文件? (即 *.docx 文件)
-
你用什么方法保存文件。 OleContainer.SaveToFile 或 OleContainer.SaveToDocument 还是别的什么?