Как разрешить изменение данных 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!