2009-05-26 15 views
12

Jak odczytałbym arkusz Excela i załadowałem zaznaczony wybór (obszar) do tablicy wielowymiarowej? Kolumna w programie Excel mogłaby sama być tablicą wielowymiarową, ponieważ zawierałaby więcej niż jedną wartość.Czytanie z Excela (zakres na tablicę wielowymiarową) C#

Pomysł (nie wiem jak dobry lub zły to jest) jest teraz zrobić pętlę for przez wszystkie Excel.Area (wybrane pola) i dodać zawartość tego pola do tablicy wielowymiarowej. Ponieważ tablica wielowymiarowa jest typu obiekt [,], a zatem nie jest generyczna, nie ma do niej wygodnej metody add(). Wszystko to należy zrobić ręcznie.

Każdy pomysł, czy to podejście jest w porządku, czy można to zrobić bardziej efektywnie?

Odpowiedz

18

można odczytać wartość zasięgiem jak tablicy:

using (MSExcel.Application app = MSExcel.Application.CreateApplication()) 
{ 
    MSExcel.Workbook book1 = app.Workbooks.Open(this.txtOpen_FilePath.Text); 
    MSExcel.Worksheet sheet = (MSExcel.Worksheet)book1.Worksheets[1]; 
    MSExcel.Range range = sheet.GetRange("A1", "F13"); 

    object value = range.Value; //the value is boxed two-dimensional array 
} 

Ten fragment kodu jest od .NET wrapper for MS Office. Ale ten sam princip jest w VSTO lub VBA w MS Excel.

2

Oto kod C# to zrobić z SpreadsheetGear:

// Load the workbook. 
    SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook(@"MyWorkbook.xlsx"); 
    // Get a range of cells as an array of object[,]. 
    object[,] values = (object[,])workbook.Worksheets["MySheet"].Cells["A1:J10"].Value; 

SpreadsheetGear zapewnia także szybki API dostępu komórkom po jednym na raz, dzięki czemu można uniknąć kopiowania wartości do tablicy bez poświęcania wydajności.

Zastrzeżenie: Jestem właścicielem SpreadsheetGear LLC

+0

Dlaczego lepiej jest użyć SpreadsheetGear kontra Excel Interop? – gyurisc

+0

To zależy od rodzaju aplikacji, którą budujesz i co z nią robisz. Zamiast wymieniać je tutaj, zapoznaj się z komentarzami naszych klientów po prawej stronie tej strony: http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx –

+0

"Zapewnia także szybkie interfejsy API" ... czy to API SpreadsheetGear.Advanced.Cells, czy tylko fakt, że rzutujemy tu wartość na obiekt [,]? Zakładam, że możesz rzucić bezpośrednio również na podwójne [,]? – Terry

Powiązane problemy