C# :: Aufgabe #263 :: Lösung #2
4 Lösungen

#263
Zelle aus Exceldatei auslesen
Anfänger - C#
von Gustl
- 12.06.2019 um 10:29 Uhr
Es solle eine Excel Datei eingelesen (XLSX) und dann ein bestimmter Inhalt einer Zelle wieder ausgegeben werden.
#2

von daniel59 (4260 Punkte)
- 23.07.2019 um 10:47 Uhr

using System; using System.Collections.Generic; using System.Runtime.InteropServices; using Excel = Microsoft.Office.Interop.Excel; namespace ConsoleReadExcel { class Program { static void Main(string[] args) { Console.WriteLine("----- Zelle aus Exceldatei auslesen ----"); ReadExcel("tba"); Console.WriteLine("Programm beendet"); Console.ReadLine(); } static void ReadExcel(string filename) { Excel.Application app = null; Excel.Workbooks workbooks = null; Excel.Workbook workbook = null; Excel.Sheets sheets = null; Excel.Worksheet worksheet = null; Excel.Range cells = null; List<object> comObjects = new List<object>(); try { app = new Excel.Application(); app.Visible = false; workbooks = app.Workbooks; workbook = workbooks.Open(filename); sheets = workbook.Worksheets; worksheet = sheets.Item[1]; cells = worksheet.Cells; comObjects.Add(app); comObjects.Add(workbooks); comObjects.Add(workbook); comObjects.Add(sheets); comObjects.Add(worksheet); comObjects.Add(cells); int row, column; do { Console.Write("Zelle: "); string cell = Console.ReadLine(); GetRowColumn(cell, out row, out column); dynamic dyn = cells[row, column]; comObjects.Add(dyn); object value = dyn.Value; Console.WriteLine($"Wert: {value}"); } while (row != 0 && column != 0); workbook?.Close(false); app?.Application?.Quit(); app?.Quit(); ReleaseComObjects(ref comObjects); } catch (Exception) { workbook?.Close(false); app?.Application?.Quit(); app?.Quit(); ReleaseComObjects(ref comObjects); } } static void ReleaseComObjects(ref List<object> comObjects) { for (int i = 0; i < comObjects.Count; i++) { object obj = comObjects[i]; if (Marshal.IsComObject(obj)) { while (obj != null && Marshal.ReleaseComObject(obj) != 0) ; while (obj != null && Marshal.FinalReleaseComObject(obj) != 0) ; } obj = null; } GC.Collect(); GC.WaitForPendingFinalizers(); } static void GetRowColumn(string cell, out int row, out int column) { row = 0; column = 0; string col = ""; string r = ""; bool columnRead = false; foreach (char c in cell) { if (char.IsLetter(c) && !columnRead) { col += c; } else { columnRead = true; r += c; } } if (!int.TryParse(r, out row)) { return; } column = GetColumnNumber(col); } static int GetColumnNumber(string column)//A --> 1 B --> 2 CI --> 87 { int col = 0; char[] temp = column.ToUpper().ToCharArray(); for (int i = temp.Length - 1; i >= 0; i--) { int num = Convert.ToInt32(temp[i]) - 64; col += num * Convert.ToInt32(Math.Pow(26, temp.Length - 1 - i)); } return col; } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1