2011-01-27 7 views
13

Итак, я пытаюсь установить значение ячейки с помощью библиотеки interc interc. Я могу это сделать со следующим:Установить значение ячейки с помощью Excel interop

sheet.Cells[row, col] = value; 

но это ужасно медленно, насколько я настроен. Поэтому я пытаюсь пройти этот маршрут:

Range excelRange = sheet.UsedRange; 
excelRange.Cells.set_Item(row, col, value); 

Код исполняется, но данные не помещаются в ячейку. Любые предложения о том, что мне не хватает? Благодаря!

+0

Сколько клеток мы говорим? –

+1

Есть ли значение в «значении»? Является ли «значение» правильного типа, чтобы он мог быть помещен в ячейку? –

ответ

19

Ваш первый метод должен работать нормально при любых разумных (и много необоснованных) количествах ячеек при условии, что вы отключили обновление экрана (Application.ScreenUpdating = false). Knowledgebase Article, описывающий, как устанавливать ячейки с помощью доступа к C# по строке и столбцу.

16

Вы пытались установить все значения за один раз, а не итерировать через свой массив и установить по одной ячейке за раз? Таким образом, вы должны передавать данные только через границу COM один раз, а не один раз на ячейку.

Excel очень гибкий в этом отношении. Попробуйте следующее:

int[] intArray = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
Range rng = excelApp.get_Range("A1", "J1"); 
rng.Value = intArray; 

Вы должны это ускорить, чем итерацию по каждой из ячеек, которую вы хотите установить.

Кроме этого выключите ScreenUpdated, как предлагает Энди, а также рассмотрите вопрос о настройке расчета вручную до тех пор, пока вы не закончите процесс копирования.

+0

Хмм, я пробовал это, и это сработало, но есть несколько ячеек, которые объединены по строке, и это не правильно устанавливает значения. Я использую массив объектов, поскольку данные смешаны, некоторые десятичные числа, некоторые строки. – Arthurdent510

+4

Вы также можете использовать многомерный массив для заполнения диапазона. –

-5

Пожалуйста, попробуйте

[excelWorksheet].Cells[1, 1] = "[String you want]"; 
1

Простое решение, но здесь вам нужно будет установить пакет Microsoft.Office.Interop.Excel на сочинительство в NuGet консоли

Install-Package Microsoft.Office.Interop.Excel

//test excel file 
    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); 

     Workbook workbook = excel.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "/TrainedFaces/AttendanceLog.xlsx", ReadOnly: false, Editable: true); 
     Worksheet worksheet = workbook.Worksheets.Item[1] as Worksheet; 
     if (worksheet == null) 
      return; 

     var abc = worksheet.Cells[2, 1].Value; 
     Range row1 = worksheet.Rows.Cells[1, 1]; 
     Range row2 = worksheet.Rows.Cells[2, 1]; 

     row1.Value = "Test100"; 
     row2.Value = "Test200"; 


     excel.Application.ActiveWorkbook.Save(); 
     excel.Application.Quit(); 
     excel.Quit(); 
Смежные вопросы