使用F#和Open XML SDK读取Excel文件中的单元格内容 [英] Reading cell contents in an Excel file with F# and Open XML SDK

查看:38
本文介绍了使用F#和Open XML SDK读取Excel文件中的单元格内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法编译以下代码,这些代码是从C#转换而来的.

I can't compile the following code, which has been translated from C#.

编译器产生此错误:错误FS0010:在实现文件中或此之前的结构化构造不完整.在这一点或其他标记之前或之前预期的不完整结构化构造.

The compiler produced this error: error FS0010: Incomplete structured construct at or before this point in implementation file. Expected incomplete structured construct at or before this point or other token.

// Assemblies
open System
open System.Linq
open System.Data
open System.Windows
open DocumentFormat.OpenXml // Also install DocumentFormat.OpenXml from nuget
open DocumentFormat.OpenXml.Packaging
open DocumentFormat.OpenXml.Spreadsheet
open Microsoft.Office.Interop.Excel


//Read the value of a single cell by string coordinates (Open XML SDK)
    let read_value_openxml file_path_and_name column row =
        let stream = new System.IO.FileStream(file_path_and_name, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)

        // Open the spreadsheet document for read-only access.
        let document = SpreadsheetDocument.Open(stream, false)

        // Retrieve a reference to the workbook part.
        let wbPart = document.WorkbookPart

        // Find the sheet with the supplied name, and then use that sheet object to retrieve a reference to the first worksheet.
        let firstSheet:Sheet = wbPart.Workbook.Descendants<Sheet>().First()
        let theSheet:Worksheet = ((WorksheetPart.wbPart.GetPartById(firstSheet.Id)).Worksheet

        // Retrieve a reference to the worksheet part.
        let wsPart = wbPart.GetPartById(firstSheet.Id)

        // Use its Worksheet property to get a reference to the cell whose address matches the address you supplied.
        let theCell = wsPart.Worksheet.Descendants<Cell>().Where(fun c -> c.CellReference = column + row).FirstOrDefault()

            // Return a value
            theCell.InnerText

推荐答案

我认为问题在于缩进.在F#中,如果代码缩进了相同数量的空格,则该代码适合一个块.

I think the problem is with indentation. In F# the code fits in one block if it's indented by the same amount of spaces.

您应该以与ead_value_openxml函数的其余代码相同的缩进级别返回值.功能似乎也已经缩进了.尝试这种方式:

You should return value at the same level of indentation like the rest code of the ead_value_openxml function. Also function seems to be indented already. Try this way:

//Read the value of a single cell by string coordinates (Open XML SDK)
let read_value_openxml file_path_and_name column row =
    let stream = new System.IO.FileStream(file_path_and_name, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)

    // Open the spreadsheet document for read-only access.
    let document = SpreadsheetDocument.Open(stream, false)

    // Retrieve a reference to the workbook part.
    let wbPart = document.WorkbookPart

    // Find the sheet with the supplied name, and then use that sheet object to retrieve a reference to the first worksheet.
    let firstSheet:Sheet = wbPart.Workbook.Descendants<Sheet>().First()
    let theSheet:Worksheet = ((WorksheetPart.wbPart.GetPartById(firstSheet.Id)).Worksheet

    // Retrieve a reference to the worksheet part.
    let wsPart = wbPart.GetPartById(firstSheet.Id)

    // Use its Worksheet property to get a reference to the cell whose address matches the address you supplied.
    let theCell = wsPart.Worksheet.Descendants<Cell>().Where(fun c -> c.CellReference = column + row).FirstOrDefault()

    // Return a value
    theCell.InnerText

这篇关于使用F#和Open XML SDK读取Excel文件中的单元格内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆