【问题标题】:Read Streaming Excel file which is not saving content to hard disk读取未将内容保存到硬盘的流式 Excel 文件
【发布时间】:2013-08-19 11:27:05
【问题描述】:

我可以通过 ADO.net 和 ExcelReader 轻松读取 excel 文件,但我必须读取一个 Excel 文件,其中数据正在流式传输(通过其他应用程序)并且数据没有保存在硬盘上

问题是文件流读取保存在硬盘中的文件内容:(但这里的数据没有保存在硬盘上

任务概览

1) 一些名为 abc.exe 的 exe(第 3 方 exe,我无法控制它)每 1 秒向名为 temp.xls 的 excel 写入数据,并且此 excel 文件已打开。我们可以在 excel 中看到这些数据,但这些数据没有保存在硬盘上。 abc.exe 只是使用 excel 来显示数据,我们只能看到数据。

2) 现在我正在尝试从 excel 中读取数据,因为该数据没有保存在硬盘上,所以我们无法借助文件流类进行读取。

3) 我正在寻找一种技术,我们可以通过该技术直接从内存而不是硬盘中从这个打开的 excel 文件中读取 C# 中的数据。

可以阅读吗?

请帮帮我

【问题讨论】:

  • 在这里查看类似的帖子。 stackoverflow.com/questions/262341/…
  • @sarmila,你提到的问题集中在如何在内存流中写入,而我的问题正好相反
  • Guyz 请帮帮我
  • 不,不是,您想读取文件而不将其写入硬盘,可以将其写入内存流。
  • 是的 abc.exe 正在流式传输/显示 temp.xls 中的数据,文件保存在硬盘上但不是当前数据,当前数据仅在 excel 中显示。不,我在阅读方面没有任何成功,我正在寻求帮助,如何在 C# 应用程序中读取这些数据

标签: c# wpf excel


【解决方案1】:

您可以遵循以下方法:

  1. open temp.xls 带有 readonly 标志,标准方式:Workbooks.Open Method
  2. 对数据进行特征分析。将内容复制到另一个工作簿。
  3. 使用FileSystemWatcher Class检测 temp.xls 上的更改并将其作为第一个点重新打开

另一件有用的事情是从 abc.exe 检测进程结束。也许只能通过检测进程表中不存在 temp.xls 或不存在 abc.exe(通过ManagementEventWatcher Class)。

无论如何,此时您应该嗅探通过 temp.xls 的所有内容。

【讨论】:

    【解决方案2】:

    如果您真的想要“实时访问”这些更改,您可以这样做:

    • 编写一个 Excel-Addin(基本上是一个 Excel 插件)
    • 它在 Excel 中运行并且可以接收事件(如工作簿/单元格更改、文件打开/关闭等)...
    • 此插件然后通过 IPC(例如 MMF)将所需的所有信息传递给您的 EXE

    另一种选择可能是使用 Interop 直接与 Excel 通信 - 这是否足够可靠取决于几个方面(其他 EXE 如何与 Excel 通信等)。

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多