private void DoMapRowsToPropertiesWorkButton_Click(object sender, RoutedEventArgs e) { try { LogMessage("I'm using RAW read service (ClassToExcelRawReaderService) to get data and then " + "I'm using a converter (ClassToExcelRowConverter) to map rows to a class' properties."); LogMessage("Note that blank rows are skipped by OpenXml."); // Load the embedded Beverages.xlsx file. String someDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string filePath = Path.Combine(someDirectory, "Beverages.xlsx"); if (File.Exists(filePath)) { LogMessage($"Loading data from {filePath}"); // Get tab names List <string> worksheetNames = string.IsNullOrWhiteSpace(WorksheetNames.Text) ? new List <string>() : WorksheetNames.Text.Split(',').ToList(); if (worksheetNames.Count > 0) { var worksheetName = worksheetNames.First().Trim(); // Passing in LogServiceMessage in optional. I'm using it here to help debug in issues while reading a file. var rawReaderService = new ClassToExcelRawReaderService(LogServiceMessage); List <ClassToExcelRawRow> rawRows = rawReaderService.ReadWorksheet(filePath, worksheetName); if (rawRows.Count > 0) { // Rows 2-6 (Column C) have the Beverage class data var converter1 = new ClassToExcelRowConverter <Beverage>(LogServiceMessage); Beverage beverage = converter1.Convert(rawRows); LogMessage(SerializationHelper.SerializeToXml(beverage)); // Rows 8-9 (Columns B & C) have the BeverageDates class data var converter2 = new ClassToExcelRowConverter <BeverageDates>(LogServiceMessage); BeverageDates dates = converter2.Convert(rawRows); LogMessage(SerializationHelper.SerializeToXml(dates)); } else { LogMessage("No data found."); } } else { LogMessage("No work sheet (tab) names specified"); } } else { LogMessage($"The file does not exists: {filePath}"); } } catch (Exception ex) { LogError(ex); } }
/// <summary>Reads everything as a string with no coversion at all. Keep in mind that Excel does NOT require /// that BLANK cells be written so rows will not always have every column in their data!</summary> private void DoRawReadWorkButton_Click(object sender, RoutedEventArgs e) { try { LogMessage("I'm using RAW read service (ClassToExcelRawReaderService) to get data and then dumping it directly out in the log."); LogMessage("Note that blank rows are skipped by OpenXml."); string filePath = FilePath.Text; if (File.Exists(filePath)) { LogMessage($"Loading data from {filePath}"); // Passing in LogServiceMessage in optional. I'm using it here to help debug in issues while reading a file. var rawReaderService = new ClassToExcelRawReaderService(LogServiceMessage); // Get tab names List <string> worksheetNames = string.IsNullOrWhiteSpace(WorksheetNames.Text) ? new List <string>() : WorksheetNames.Text.Split(',').ToList(); if (worksheetNames.Count > 0) { foreach (string worksheetName in worksheetNames) { List <ClassToExcelRawRow> rawRows = rawReaderService.ReadWorksheet(filePath, worksheetName.Trim()); if (rawRows.Count > 0) { LogMessage($"Work sheet name: {worksheetName}"); foreach (var row in rawRows) { StringBuilder sb = new StringBuilder(); sb.AppendFormat("Row: {0} --> ", row.RowNumber); foreach (var column in row.Columns) { sb.AppendFormat("[Column: {0} Data: {1}]", column.ColumnLetter, column.Data); } LogMessage(sb.ToString()); } } else { LogMessage($"No data found on work sheet named: {worksheetName}"); } LogMessage("----------------------------------"); } } else { LogMessage("No work sheet (tab) names specified."); } } else { LogMessage($"The file does not exists: {filePath}"); } } catch (Exception ex) { LogError(ex); } }