gpt4 book ai didi

f# - 如何将 OpenXML SDK 与 F# 和 MemoryStreams 一起使用

转载 作者:行者123 更新时间:2023-12-04 18:20:59 25 4
gpt4 key购买 nike

This article说在使用 OpenXML SDK 时需要使用可调整大小的 MemoryStreams,并且示例代码运行良好。

但是,当我将示例 C# 代码翻译成 F# 时,文档保持不变:

open System.IO
open DocumentFormat.OpenXml.Packaging
open DocumentFormat.OpenXml.Wordprocessing

[<EntryPoint>]
let Main args =
let byteArray = File.ReadAllBytes "Test.docx"

use mem = new MemoryStream()
mem.Write(byteArray, 0, (int)byteArray.Length)

let para = new Paragraph()
let run = new Run()
let text = new Text("Newly inserted paragraph")
run.InsertAt(text, 0) |> ignore
para.InsertAt(run, 0) |> ignore

use doc = WordprocessingDocument.Open(mem, true)
doc.MainDocumentPart.Document.Body.InsertAt(para, 0) |> ignore

// no change to the document
use fs = new FileStream("Test2.docx", System.IO.FileMode.Create)
mem.WriteTo(fs)

0

当我使用 WordprocessingDocument.Open("Test1.docx", true) 时效果很好,但我想使用 MemoryStream .我究竟做错了什么?

最佳答案

您对 doc 所做的更改未反射(reflect)在 MemoryStream mem 中直到你关闭 doc .配售doc.Close()如下

...
doc.MainDocumentPart.Document.Body.InsertAt(para, 0) |> ignore
doc.Close()
...

解决问题,您将收到文本 Newly inserted paragraph在您的 Test2.docx 顶部.

此外,您的代码段缺少一个必需的引用:
open DocumentFormat.OpenXml.Packaging 

来自 WindowsBase.dll .

编辑 :正如 ildjarn 所指出的,更多的 F# 惯用语将是以下重构:
open System.IO
open System.IO.Packaging
open DocumentFormat.OpenXml.Packaging
open DocumentFormat.OpenXml.Wordprocessing

[<EntryPoint>]
let Main args =
let byteArray = File.ReadAllBytes "Test.docx"

use mem = new MemoryStream()
mem.Write(byteArray, 0, (int)byteArray.Length)

do
use doc = WordprocessingDocument.Open(mem, true)
let para = new Paragraph()
let run = new Run()
let text = new Text("Newly inserted paragraph")
run.InsertAt(text, 0) |> ignore
para.InsertAt(run, 0) |> ignore
doc.MainDocumentPart.Document.Body.InsertAt(para, 0) |> ignore

use fs = new FileStream("Test2.docx", FileMode.Create)
mem.WriteTo(fs)

0

关于f# - 如何将 OpenXML SDK 与 F# 和 MemoryStreams 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10701885/

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