gpt4 book ai didi

ms-access - 如何在通过 C# 读取存储在 access 数据库中 'OLE Object' 字段中的 word 文档时删除垃圾字符?

转载 作者:行者123 更新时间:2023-12-04 05:51:42 25 4
gpt4 key购买 nike

我正在 Access Ms Access数据库通过 C# .我能够阅读所有字段。我遇到的问题是,在阅读时 .txt.doc存储在 OLE Object 中的文件表的字段,在实际文本之前和之后也读取了许多额外的垃圾字符,例如-ÿÿÿÿ‡€ ÿÿÿÿÿÿÿÿˆ ÿÿÿÿÿÿÿÿ€ ˆˆˆˆˆˆˆˆ€ ÿÿÿÿÿÿÿÿþ

i 8 @ñÿ 8 N o r m a l CJ _H aJ mH sH tH < A@òÿ¡ <

D e f a u l t P a r a g r a p h F o n t … ÿÿÿÿ ( f p ³ ú ÿ A Ä M • À ' n ­ î 0 q Œ Ï
.

我的 C# 代码就像-
`

/*Read from the query and write in a temporary file*/
var oleBytes = (Byte[])Cmd.ExecuteScalar();
MemoryStream ms = new MemoryStream();
ms.Write(oleBytes, 0, oleBytes.Length - 0);
var file = Path.GetTempFileName();
using (var fileStream = File.OpenWrite(file))
{
var buffer = ms.GetBuffer();
fileStream.Write(buffer, 0, (int)ms.Length);
}

`

然后把这个临时文件读成一个word文档——
`
Microsoft.Office.Interop.Word.ApplicationClass wordObject = new ApplicationClass();
object fpath = file; //this is the path
object nullobject = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Document docs = wordObject.Documents.Open
(ref fpath, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject,
ref nullobject, ref nullobject, ref nullobject, ref nullobject);

docs.ActiveWindow.Selection.WholeStory();

docs.ActiveWindow.Selection.Copy();

IDataObject iData = Clipboard.GetDataObject();

if (iData != null)
data = iData.GetData(DataFormats.Text).ToString();

`

不知道出了什么问题?我是否也在从表中读取字段元数据?如果是如何避免呢?什么是有效的阅读方式 OLE Object存储图像以外的文件的字段?

最佳答案

我找到了 Word 文档( .doc 文件)的解决方案。 Ms Access 中的 OLE 对象存储在实际数据之前包含一些标题信息,因此简单地将字段内容提取为字节数组并将其保存到磁盘是行不通的。任何 OLE 对象文件都有一些标准签名。对于word文档,OLEheaderLength is 85 bytes .所以我从字节数组的两端剥离 85 个字节,例如 -

Con.Open();
string _query="select licenseDoc from Products where ID=56";
//Column licenseDoc contains word and text douments as OLE Objects
OleDbCommand Cmd = new OleDbCommand(_query, Con);

const int offset =85;
var oleBytes = (Byte[])Cmd.ExecuteScalar();
MemoryStream ms = new MemoryStream();
ms.Write(oleBytes, offset, oleBytes.Length - offset);

var file = Path.GetTempFileName();
using (var fileStream = File.OpenWrite(file))
{
var buffer = ms.GetBuffer();
fileStream.Write(buffer, 0, (int)ms.Length);
}

变量 file将包含 .tmp 的路径文件,其中包含从存储为 OLE object in Ms Access 的 word 文档中读取的数据。 .这个文件可以直接打开为 word document或者它的扩展名可以更改 .doc .
OLEheaderLength其他格式如下:
1] JPEG/JPG=224
2] BMP=78
3] PDF=85
4] SNP=74
5] DOC=85/90
6] DOCX=87

我不知道 OLEheaderLength.txt(Simple Text) files .不幸的是,上述解决方案仅适用于 .doc文件。但是说到 .docx文件和任何其他文件格式,它失败。

为了找出 ole 头的长度,您可以简单地使用从这里解释和下载的库 - http://jvdveen.blogspot.in/2009/02/ole-and-accessing-files-embedded-in.html

关于ms-access - 如何在通过 C# 读取存储在 access 数据库中 'OLE Object' 字段中的 word 文档时删除垃圾字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9992087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com