Kiran_Desai Ответов: 0

Как разрешить изменение данных excel как вручную, так и программно?


I am using C# windows application for Excel data add/update. I had added Microsoft.Office.Interop.Excel reference. On my form, I have one panel control panel1, one ListBox lstSamples and two button btnAddSample, btnFormatWorksheet.
My sample code is as below:

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);

    }

}



Когда блок кода из btnAddSample_Click будет выполнен, excel откроется в режиме только для чтения, но я хочу, чтобы этот файл был в режиме чтения-записи. Перед событием btnAddSample_Click все работает так, как ожидалось. Я не хочу снова открывать этот excel

Что я уже пробовал:

Пытаясь найти свойства excel, Workbook, Worksheet, они изменяются после выполнения события нажатия кнопки.

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

CHill60

btnAddSample_Click не открывает Excel, это происходит, когда вы загружаете свое приложение. Попробуйте пройти через код, чтобы проследить за тем, что происходит - в частности, каково значение lastUsedRow и есть ли на самом деле selectedItem в вашем списке

Maciej Los

5ed!

0 Ответов