基于包含文件路径的查询在表单上嵌入多个 Excel 工作表
Posted
技术标签:
【中文标题】基于包含文件路径的查询在表单上嵌入多个 Excel 工作表【英文标题】:Embedding Multiple Excel Worksheets on a form based on a query containing file paths 【发布时间】:2013-09-23 16:53:45 【问题描述】:首先我将描述我的目标,然后我将解释我到目前为止所做的工作。
我的目标是建立一个数据库,用户可以在其中填写一些字段,其中包括描述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 中实现?无论哪种方式,如果可能的话,我该怎么做?将不胜感激细节甚至提示/想法/沉思等。
【问题讨论】:
我的想法是,这听起来像是一个非常难以维护的数据库。如果有人决定移动或复制 Excel 文件,则您的数据库链接已损坏或过期。 澄清一下,您试图在您的ms access
应用程序内 显示excel 文件的范围?在你说的object frames
里我不知道怎么做,但是在c#/WPF/Winforms中是可以实现的。
我了解链接断开的风险,但是由于每天都会查看此屏幕,因此用户将受到相当严格的约束,否则每个人都会看到 A 正在处理的文件已损坏等。这就是为什么我希望他们负责维护自己的路径并从查询中获取它,而不是我只是将路径硬编码到对象中
如果我想在 C#/WPF/Winforms 中执行此操作,您有什么建议的起点吗?我从未尝试过绑定 OLE 对象,它一直是本地类型的字段。
看看我的回答,它应该会给你一个 wpf/winforms 解决方案的良好开端
【参考方案1】:
要在您的WPF/Winforms
应用程序中打开和查看Excel
文件,您需要使用Primary Interop Assemblies 来获得您计划支持的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
应用程序中,您可能需要修改 this code project 以处理 Excel
而不是 Word
。
【讨论】:
我通读了教程和您的代码。它解释了如何从 Excel 文件中获取数据以及如何通过 C# 编辑一个。这将允许我使用DataGridView
或类似的东西显示/绑定数据。这不是我想要做的。我想以每个用户自己格式化的方式显示 excel 文件的“预览”。有没有办法使用interop
在 WPF 中显示或者是另一个类/lib?
我明白了,您想将 excel 文件嵌入(我可以阅读,我保证 :) 到您的应用程序中,而不是显示其数据。我发布了一个很好的教程的链接。查看我的编辑。以上是关于基于包含文件路径的查询在表单上嵌入多个 Excel 工作表的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 2003 - Access 表单上的嵌入式 Excel 电子表格
如何在excel vba中传递包含excel文件路径的字符串以访问vba