2009-01-23 3 views
20

Я пытаюсь открыть файл Excel и заполнить его ячейки данными? До сих пор я сделал следующее кодирование.C#: Как получить доступ к ячейке Excel?

В настоящее время я нахожусь на этом этапе с помощью следующего кода, но до сих пор я получаю ошибки:

Microsoft.Office.Interop.Excel.ApplicationClass appExcel = 
       new Microsoft.Office.Interop.Excel.ApplicationClass(); 
try 
{ 
    // is there already such a file ? 
    if (System.IO.File.Exists("C:\\csharp\\errorreport1.xls")) 
    { 
     // then go and load this into excel 
     Microsoft.Office.Interop.Excel.Workbooks.Open(
      "C:\\csharp\\errorreport1.xls", true, false, 
      Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
      Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
      Missing.Value, Missing.Value, Missing.Value, Missing.Value); 
    } 
    else 
    { 
     // if not go and create a workbook: 
     newWorkbook = appExcel.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); 
     Microsoft.Office.Interop.Excel._Worksheet excelWorksheet = 
      (Microsoft.Office.Interop.Excel._Worksheet) 
       newWorkBook.Worksheets.get_Item(1); 
    } 
i++; 
j = 1; 

j++; 
objsheet.Cells(i, j).Value = "Tabelle: " + rs.Fields["Table_Name"]; 
j++; 
objsheet.Cells(i, j).Value = "kombinationsschluessel:FALL " 
           + rs3.Fields[1].Value; 
j++; 
objsheet.Cells(i, j).Value = "Null Value: "; 
j++; 
objsheet.Cells(i, j).Value = "Updated with 888"; 

Это топ 2 ошибки я получаю:

Error 1 An object reference is required for the nonstatic field, method, or 
     property 'Microsoft.Office.Interop.Excel.Workbooks.Open(string, object, 
     object, object, object, object, object, object, object, object, object, 
     object, object, object, object)' 

Error 2 The name 'newWorkbook' does not exist in the current context 

ответ

20

Если вы пытаетесь для автоматизации Excel вы, вероятно, не должны открывать документ Word и использовать автоматизацию Word;)

Проверьте это, следует g и др начала,

http://www.codeproject.com/KB/office/package.aspx

А вот какой-то код. Это взято из некоторого моего кода и удалено много вещей, поэтому он ничего не делает и не может компилировать или работать точно, но он должен вас поймать. Он ориентирован на чтение, но должен указывать вам в правильном направлении.

Microsoft.Office.Interop.Excel.Worksheet sheet = newWorkbook.ActiveSheet; 

if (sheet != null) 
{ 
    Microsoft.Office.Interop.Excel.Range range = sheet.UsedRange; 
    if (range != null) 
    { 
     int nRows = usedRange.Rows.Count; 
     int nCols = usedRange.Columns.Count; 
     foreach (Microsoft.Office.Interop.Excel.Range row in usedRange.Rows) 
     { 
      string value = row.Cells[0].FormattedValue as string; 
     } 
    } 
} 

Вы также можете сделать

Microsoft.Office.Interop.Excel.Sheets sheets = newWorkbook.ExcelSheets; 

if (sheets != null) 
{ 
    foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in sheets) 
    { 
      // Do Stuff 
    } 
} 

И если вам нужно вставить строки/столбцы

// Inserts a new row at the beginning of the sheet 
Microsoft.Office.Interop.Excel.Range a1 = sheet.get_Range("A1", Type.Missing); 
a1.EntireRow.Insert(Microsoft.Office.Interop.Excel.XlInsertShiftDirection.xlShiftDown, Type.Missing); 
+0

Извините, неправильный код отправлен, я исправил его – tksy

3

Я думаю, что вы должны объявить соответствующий лист!

Попробуйте что-то вроде этого

objsheet(1).Cells[i,j].Value; 
+0

Где вы это нашли? И две точки - это плохая практика. – nawfal

1

Как я работаю для автоматизации Office/Excel:

  1. Запись макроса, это будет генерировать шаблон VBA
  2. Редактировать шаблон VBA так будет соответствует моим потребностям
  3. Конвертировать в VB.Net (Маленький шаг для мужчин)
  4. Оставьте это в VB.Net, гораздо больше просто, как сделать это с помощью C#
+1

из вопроса, он хочет ее на C#, но да, это было бы хорошо для VB.Net. –

1

Try:

Excel.Application oXL; 
Excel._Workbook oWB; 
Excel._Worksheet oSheet; 
Excel.Range oRng; 

oXL = new Excel.Application(); 
oXL.Visible = true; 
oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value)); 

oSheet = (Excel._Worksheet)oWB.Worksheets; 
oSheet.Activate(); 

oSheet.Cells[3, 9] = "Some Text" 
+0

это неверно, OP спрашивает, как открыть книгу, а не как создать новую ... (вы используете метод .add). –

1

Simple.

Чтобы открыть книгу. Использование xlapp.workbooks.Open()

, где вы ранее объявили и instanitated xlapp, как так .. Excel.Application xlapp = новый Excel.Applicaton();

параметры указаны правильно.

Далее убедитесь, что вы используете свойство Value2 при назначении значения ячейке, используя либо свойство ячеек, либо объект диапазона.

1

Это отлично работает для меня

 Excel.Application oXL = null; 
     Excel._Workbook oWB = null; 
     Excel._Worksheet oSheet = null; 

     try 
     { 
      oXL = new Excel.Application(); 
      string path = @"C:\Templates\NCRepTemplate.xlt"; 
      oWB = oXL.Workbooks.Open(path, 0, false, 5, "", "", 
       false, Excel.XlPlatform.xlWindows, "", true, false, 
       0, true, false, false); 

      oSheet = (Excel._Worksheet)oWB.ActiveSheet; 
      oSheet.Cells[2, 2] = "Text"; 
1

Вы можете использовать следующий код; он отлично работает для меня:

newWorkbook = appExcel.Workbooks.Add(); 
Смежные вопросы