C #: Как получить доступ к ячейке Excel? - PullRequest
20 голосов
/ 23 января 2009

Я пытаюсь открыть файл 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

Ответы [ 7 ]

20 голосов
/ 23 января 2009

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

Проверьте это, оно должно начать,

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 );
3 голосов
/ 23 января 2009

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

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

objsheet(1).Cells[i,j].Value;
1 голос
/ 14 марта 2011

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

newWorkbook = appExcel.Workbooks.Add();
1 голос
/ 07 октября 2010

Это прекрасно работает для меня

       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 голос
/ 01 февраля 2010

Simple.

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

где вы ранее объявили и создали xlapp как ... Excel.Application xlapp = new Excel.Applicaton ();

параметры верны.

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

1 голос
/ 29 января 2010

Попробуйте:

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"
1 голос
/ 28 января 2009

Как я работаю, чтобы автоматизировать Office / Excel:

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