【问题标题】:Copy deedle frame to excel复制deedle框架到excel
【发布时间】:2014-02-05 12:36:21
【问题描述】:

我的目标是有效地将deedle frame 复制到 F# 中的 excel 中。 我从未使用过 F# 中的 excel。我受到this tutorial 的启发。

这是我的代码:

#r "Microsoft.Office.Interop.Excel"
open Microsoft.Office.Interop.Excel
/// Export data frame to excel
let exportFrameToExcel (frame: Frame<DateTime, string>) (x,y) = 
    // Run Excel as a visible application
    let app = new ApplicationClass(Visible = true) 
    // Create new file and get the first worksheet
    let workbook = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet) 
    // Note that worksheets are indexed from one instead of zero
    let worksheet = (workbook.Worksheets.[1] :?> Worksheet) 

    let mutable col = y+1
    for key in frame.ColumnKeys do
        worksheet.Cells.[x, col] <- key
        col <- col + 1
    for i = 0 to frame.RowCount-1 do
        let row = frame.GetRowAt(i)
        let rowKey = frame.GetRowKeyAt(i)
        worksheet.Cells.[i+x+1, y] <- rowKey
        for j = 0 to frame.ColumnCount-1 do
            let value = row.GetAtAs<float>(j)
            worksheet.Cells.[i+x+1, j+y+1] <- value

如果我在复制数据时触摸 Excel 窗口,它会很慢并且可能会崩溃。 我相信还有很大的改进空间,例如我认为只有在复制数据后才应该将ApplicationClass 改为visible

如果能以高效和惯用的方式完成此任务,我将不胜感激。谢谢。

【问题讨论】:

    标签: excel f# deedle


    【解决方案1】:

    在 BlueMountain(我们在 Deedle 上完成了大部分工作),他们实际上有一个用于将数据传递到 Excel 的实用程序。我们想将它包含在 Deedle 中,但从未设法发布它,因为它需要一些时间来完善和记录内容。

    我们实际上将源代码放在了 GitHub 上(作为我的演示演讲的一部分),所以你 can get it here
    使用这个,你应该可以写:

    xl?A1 <- deedleFrame
    

    您可以做的还有很多 - 看看 Xl 类型的成员。

    此外,我们最初使用NetOffice,它是一个更易于使用的 Excel COM 互操作包装器 - 引用的示例没有使用它,但它可能是一个好主意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 2017-02-19
      • 2011-10-20
      • 2010-09-28
      • 1970-01-01
      相关资源
      最近更新 更多