1

首先我会描述我的目标,然后我会解释我到目前为止所做的事情。

我的目标是建立一个数据库,用户可以在其中填写一些字段,其中包括描述excel文件所在位置和他们想要显示的范围的字段。将有一个表格显示所有记录,其中嵌入了 excel 文件。基本上,它是一种概览屏幕,其中嵌入/链接了多个 Excel 文件的内容。

 ------------------ ---------------------------------
|    Record #1     |     Embedded/Linked Excel #1    |   
|    Record #2     |     Embedded/Linked Excel #2    |
         .                             .
         .                             .
         .                             .

目前我选择了 MS Access,但我并不局限于使用 VBA/Access,而是愿意在 .NET 世界中使用一些东西。我对 OLE 对象的体验仅限于非“连续”形式的使用,所以我并不完全知道我正在尝试的内容是否可行。

在 MS Access 中,我尝试使用未绑定对象框架。这些链接/嵌入 excel 文件很容易给定一个文件路径,但它们似乎没有能力拥有一个控制源,我可以在其中绑定来自查询的文件路径。表单需要一次显示超过 1 个记录/excel 文件。

我还尝试使用绑定对象框架将实际的 excel 文件存储在表中。这不是理想的解决方案,因为内容已经存在于不同的 excel 文件中,不希望用户必须更新两个位置的文件 - 真实文件和表中的 OLE 对象。

我的目标可以在 MS Access/VBA 中实现吗?如果不是,是否可以在 C#/WPF/Winforms 中实现?无论哪种方式,如果可能的话,我该怎么做?会欣赏细节甚至提示/想法/沉思等。

4

1 回答 1

1

要在应用程序中打开和查看Excel文件,您WPF/Winforms需要使用计划支持的版本的主互操作程序集。Excel

DotNetPerls有一个很好的入门教程。

在您的情况下,它看起来像:

public void ExcelOpenSpreadsheets(string databaseStoredExcelFileName, int worksheetNumber, string startRange, string endRange)
{
    try
    {
        Workbook workBook = _excelApp.Workbooks.Open(databaseStoredExcelFileName,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing);
        var worksheet = workbook.Worksheets[worksheetNumber] as Microsoft.Office.Interop.Excel.Worksheet;

        Excel.Range range = worksheet.get_Range(startRange, endRange);
        workBook.Close(false, thisFileName, null);
        Marshal.ReleaseComObject(workBook);

        //now do something with "range"
    }
    catch
    {
    }
}

为了将excel 文件嵌入WPF/Winforms到您的应用程序中,您可能需要修改此代码项目来处理Excel而不是Word.

于 2013-09-23T17:24:30.707 回答