Pytanie C #: Jak uzyskać dostęp do komórki Excel?


Próbuję otworzyć plik Excel i wypełnić jego komórki danymi? Zrobiłem do tej pory następujące kodowanie.

Obecnie jestem na tym etapie z następującym kodem, ale nadal dostaję błędy:

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

To są 2 najczęstsze błędy, które dostaję:

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
2018-01-23 13:56


pochodzenie




Odpowiedzi:


Jeśli próbujesz zautomatyzować program Excel, prawdopodobnie nie powinieneś otwierać dokumentu Worda i używać automatyzacji Worda;)

Sprawdź to, powinno zacząć,

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

A oto kod. Jest on pobierany z części mojego kodu i ma wiele usuniętych rzeczy, więc nic nie robi i może nie kompilować lub działać dokładnie, ale powinno ci to pomóc. Jest zorientowany na czytanie, ale powinien wskazać ci właściwy kierunek.

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

Możesz także zrobić

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

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

A jeśli chcesz wstawić wiersze / kolumny

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

20
2018-01-23 14:03



Przepraszam, że napisałem zły kod, poprawiłem go - tksy


Myślę, że musisz zadeklarować powiązany arkusz!

Spróbuj czegoś takiego

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

3
2018-01-23 14:03



Gdzie to znalazłeś? A dwie kropki to zła praktyka. - nawfal


Jak pracuję, aby zautomatyzować Office / Excel:

  1. Zapisz makro, spowoduje to wygenerowanie szablonu VBA
  2. Edytuj szablon VBA, aby odpowiadał moim potrzebom
  3. Konwertuj na VB.Net (mały krok dla mężczyzn)
  4. Pozostaw to w VB.Net, O wiele łatwiejsze niż w C #

1
2018-01-28 09:31



od pytania, chce go w C #, ale tak, to byłoby dobrze dla VB.Net. - Anonymous Type


Próbować:

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
2018-01-29 15:55



to nie jest poprawne, OP pyta, jak otworzyć skoroszyt, a nie jak utworzyć nowy ... (używasz metody .add). - Anonymous Type


Prosty.

Aby otworzyć skoroszyt. Użyj xlapp.workbooks.Open ()

gdzie wcześniej zadeklarowałeś i zainicjowałeś xlapp jako taki ... Excel.Application xlapp = new Excel.Applicaton ();

parametry są poprawne.

Następnie upewnij się, że korzystasz z właściwości Wartość 2 podczas przypisywania wartości do komórki przy użyciu właściwości komórki lub obiektu zakresu.


1
2018-01-31 22:42





To działa dobrze dla mnie

       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
2017-10-07 12:56





Możesz użyć poniższego kodu; to działa dobrze dla mnie:

newWorkbook = appExcel.Workbooks.Add();

1
2018-03-14 12:23