Как разрешить изменение данных в Excel как вручную, так и программно? - PullRequest
2 голосов
/ 04 апреля 2019

Я использую приложение C # windows для добавления / обновления данных Excel. Я добавил ссылку Microsoft.Office.Interop.Excel (Ссылка -> Правый клик -> Добавить ссылку -> COM -> Библиотеки типов -> Библиотеки объектов Microsoft Excel 1X.0). В моей форме у меня есть один элемент управления panel1, один список lstSamples и две кнопки btnAddSample, btnFormatWorksheet.

Мой пример кода, как показано ниже:

using Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;


public partial class Form1 : Form
{
    Microsoft.Office.Interop.Excel.Application excelApp;
    Workbook excelWorkBook;
    Worksheet excelWorkSheet;

    public Form1()
    {
        InitializeComponent();
        LoadExcelFile();
    }

    [DllImport("user32.dll")]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

    private void LoadExcelFile()
    {
        excelApp = new Microsoft.Office.Interop.Excel.Application();

        excelApp.Visible = true;
        excelApp.ScreenUpdating = true;
        excelApp.EnableAutoComplete = false;
        excelWorkBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
        IntPtr excelHwnd = new IntPtr(excelApp.Application.Hwnd);
        SetParent(excelHwnd, panel1.Handle);
    }

    private void btnAddSample_Click(object sender, EventArgs e)
    {
        excelWorkSheet = (Worksheet)excelWorkBook.Worksheets.get_Item(1);
        int lastUsedRow = excelWorkSheet.UsedRange.Rows.Count;
        excelWorkSheet.Cells[lastUsedRow + 1, 1] = lstSamples.SelectedItem.ToString();
        lstSamples.Items.Remove(lstSamples.SelectedItem);
    }

   private void btnFormatWorksheet_Click(object sender, EventArgs e)
   {
        Range chartRange;
        excelWorkSheet = (Worksheet)excelWorkBook.Worksheets.get_Item(1);
        chartRange = excelWorkSheet.get_Range("b2", "e9");
        chartRange.BorderAround(XlLineStyle.xlContinuous, 
        XlBorderWeight.xlMedium, XlColorIndex.xlColorIndexAutomatic, 
        XlColorIndex.xlColorIndexAutomatic);

    }
}    

Пожалуйста, следуйте инструкциям, как я упомянул 1. Запустите приложение и добавьте данные в ячейку «A1» (которая имеет строковый тип) 2. Снова добавьте некоторые данные в ячейку «A2» и нажмите Enter. Выберите один элемент из lstSamples в списке и нажмите btnAddSample (Результат как выбранный элемент будет добавлен в ячейку «A3» 4. Попробуйте изменить данные ячейки «A1» или «A2». (Здесь lstSample содержит элементы строкового типа как Test1, Test2, Test3, ....). Если вы можете редактировать ячейки, нажмите btnFormatWorksheet и попробуйте изменить любую ячейку.

1 Ответ

4 голосов
/ 11 апреля 2019

Почему вы ссылаетесь на COM DLL? Вы должны ссылаться на .Net PIA - Первичные сборки взаимодействия в этом месте через вкладку .Net в окне References и перейдите к:

C: \ Program Files (x86) \ Microsoft Visual Studio [версия] \ Инструменты Visual Studio для Office \ PIA \ Office [версия] \ Microsoft.Office.Interop.Excel.dll

Только для модульного тестирования вы ссылаетесь на COM. См. Мой ответ здесь и , как я изначально это разработал . Это легко запутать, потому что в Solution Explorer их обоих называют одним и тем же!

enter image description here


Если это не сработает, я изначально назвал это ответом, чтобы сэкономить время других людей.

И Ахмед, и я не можем воспроизвести описанную вами проблему с помощью предоставленного вами кода.

См., Я набрал в ячейках A1 и A2, затем я выбрал элемент в списке и нажал кнопку. Затем я выбираю ячейку A2 и набираю Editable.

enter image description here

ps Если вы можете предоставить инструкции по воспроизведению, я буду рад еще раз взглянуть на это.

UPDATE:

Ваши исправленные шаги по воспроизведению проблемы неверны, у меня работает:

enter image description here

ОБНОВЛЕНИЕ 2:

Убедитесь, что фильтры сообщений пересылают фокус на другую ячейку / элемент управления:

Excel CustomTaskPane с управлением веб-браузером - проблемы с клавиатурой / фокусом

...