C# 将文本从我的 winform 文本框导入到已打开 Excel 工作簿中的选定范围

C# Importing text from my winform textbox to selected range in already openend Excel workbook

正在尝试将我的 winform 文本框中的值写入 excel 中的一个或多个选定单元格。

场景:

  1. 使用 windows 资源管理器打开一个 excel 文件(所以这里没有编码)

  2. Select 此 excel 文件中的一个单元格 sheet(我知道选择多个单元格可能是个问题,但我想稍后解决)

  3. 打开我的 winform 应用程序(我们称它为 LookApp 以供参考)
  4. 在应用程序中做一些事情,使文本框包含一个字符串(我们将字符串称为 ProductCode 以供参考)
  5. 按 LookApp 上的按钮
  6. 字符串 Productcode 被插入到选定的单元格中
  7. Excel 获得对 LookApp 的关注

显然,我可以处理第 1 步到第 5 步。但是我在网上搜索了很远,找不到关于编码第 6 步的代码片段。 一旦我知道第 6 步,可能很容易编写第 7 步的代码...

我是 MSOffice 编码的新手,或者 winform/database 以外的人。 我在我的项目中引用了 MS Interop,但不知道如何使用它:(

真心希望你能帮上忙!

您可以在 class(表单等...)中声明一个 Excel 范围字段

Range currentCellRange;

然后注册到Excel的工作表SelectionChange事件

exWs.SelectionChange += exWs_SelectionChange;

exWs_SelectionChange 方法中,将当前单元格范围分配给您的 currentCellRange 字段

void exWs_SelectionChange(Range target)
{
    currentCellRange = target;
}

当您按下按钮时,在 currentCellRange 位置的行和列处使用 WorkSheet 来设置单元格的值。

private void button1_Click(object sender, EventArgs e)
{
    exWs.Cells[currentCellRange.Row, currentCellRange.Column].Value = textBox1.Text;
}

此外,当您完成 Excel 后,记得在 Application 实例上调用 Quit()

感谢您的回答,但似乎有点复杂...

偶然发现了一些代码并将它们混合在一起直到它起作用: try-catch 谈不上漂亮,但它确实有效...

        private void cbCopyToExcel1_Click(object sender, EventArgs e)
    {
        Excel.Application xlApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
        try
        {
            Excel.Range xlRange = xlApp.ActiveCell;
            xlRange.Value = tbProductcode.Text;
        }
        catch 
        {
            MessageBox.Show("Be sure to open an Excel file first");
        }
    }