【问题标题】:Is it possible to import data from Excel through memory?是否可以通过内存从 Excel 导入数据?
【发布时间】:2017-02-13 02:05:04
【问题描述】:

假设打开了一个新的 Excel 文件并在其中输入了数据。外部 C# 应用程序能否连接到 Excel 进程并从中获取数据?此外,Excel 文件永远不会保存到文件中。

这会很难做到吗?您能否为我指明如何实现这一目标的正确方向。

【问题讨论】:

  • 您想要一个 C# 应用程序来读取 Excel 为特定文件存储在内存中的内容吗?听起来很痛苦,如果有可能的话。
  • 不,大多数操作系统的应用程序安全模型不允许这样做!
  • 如果您可以控制接收应用程序,我建议您为 Excel 创建一个 AddIn 并从 Excel 发布/推送,而不是拉取。这将使事情变得更容易,您将能够使用受支持的 API。

标签: c# excel memory import process


【解决方案1】:

只需将此代码添加到 Windows 窗体应用程序的代码中,该应用程序上添加了一个名为“button1”的按钮。此示例代码将遍历 Excel 文件的单元格并在消息框中显示每个单元格的内容。当然需要对“Microsoft.Office.Interop.Excel”的项目引用。

别忘了实际创建excel文件,在这个例子中我使用了这个路径“C:\ExcelData\DataToImp.xlsx”。

using Excel = Microsoft.Office.Interop.Excel;


    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        Excel.Range range;

        string str;
        int rCnt = 0;
        int cCnt = 0;

        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Open("C:\\ExcelData\\DataToImp.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        range = xlWorkSheet.UsedRange;

        for (int rowIndex = 1; rowIndex <= range.Rows.Count; rowIndex++)
        {
            for (int columnIndex = 1; columnIndex <= range.Columns.Count; columnIndex++)
            {
                Excel.Range rangeTest = range.Cells[rowIndex, columnIndex] as Excel.Range;

                if (rangeTest.MergeCells)// && rangeTest.Value2 == null)
                {
                    //continue;

                    int columns = rangeTest.Columns.Count;
                    columnIndex += columns;
                }

                MessageBox.Show("m " + (string)rangeTest.Value2);

            }
        }

        xlWorkBook.Close(true, null, null);
        xlApp.Quit();

        releaseObject(xlWorkSheet);
        releaseObject(xlWorkBook);
        releaseObject(xlApp);
    }

    private void releaseObject(object obj)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
            obj = null;
        }
        catch (Exception ex)
        {
            obj = null;
            MessageBox.Show("Unable to release the Object " + ex.ToString());
        }
        finally
        {
            GC.Collect();
        }
    }

【讨论】:

  • 这也是我的第一个。 OP 的警告是,不,您不能使用已经打开的 Excel 并以这种方式“连接”它,您必须首先运行您的程序,该程序本身会打开 Excel,然后您将能够读取人们输入的任何内容进入它。
  • 是的,就是这样,在Excel中进行一些数据修改后,文件必须“保存”到磁盘上。
  • 应用程序也不需要“打开”Excel,它只是读取文件。无需打开 Excel 即可使用。
  • 但是您将如何确定当前在 Excel 中打开的文件?如果打开多个工作簿怎么办?
猜你喜欢
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-30
  • 2019-06-16
  • 2023-01-31
相关资源
最近更新 更多