public ExcelDataReader(Stream file, ref List <DataItemINTEX> listItems, ref List <DataPalletINTEX> listPallets, ref List <DataCaseINTEX> listCases) { XlsHeader hdr = XlsHeader.ReadHeader(file); XlsRootDirectory dir = new XlsRootDirectory(hdr); XlsDirectoryEntry workbookEntry = dir.FindEntry("Workbook"); if (workbookEntry == null) { workbookEntry = dir.FindEntry("Book"); } if (workbookEntry == null) { throw new FileNotFoundException("Oops! Neither stream 'Workbook' nor 'Book' was found in file"); } if (workbookEntry.EntryType != STGTY.STGTY_STREAM) { throw new FormatException("Oops! Workbook directory entry is not a Stream"); } m_stream = new XlsBiffStream(hdr, workbookEntry.StreamFirstSector); ReadWorkbookGlobals(); GC.Collect(); m_workbookData = new DataSet(); // first sheet : boxes for (int iSheet = 0; iSheet < m_sheets.Count; ++iSheet) { if (string.Equals(m_sheets[iSheet].Name, "Articles", StringComparison.CurrentCultureIgnoreCase)) { listItems = new List <DataItemINTEX>(); if (ReadWorksheet(m_sheets[iSheet])) { DataTable dt = m_sheets[iSheet].Data; for (int iRow = 4; iRow < dt.Rows.Count; ++iRow) { try { DataItemINTEX item = new DataItemINTEX(); // ref item._ref = ParseObjectToString(dt.Rows[iRow][0], "Ref"); // description if (DBNull.Value != dt.Rows[iRow][1]) { item._description = (string)dt.Rows[iRow][1]; } // UPC item._UPC = ParseObjectToString(dt.Rows[iRow][2], "UPC"); // PCB item._PCB = ParseObjectToInt(dt.Rows[iRow][3], "PCB"); // GenCode item._gencode = ParseObjectToString(dt.Rows[iRow][4], "GenCode"); // weight item._weight = ParseObjectToDouble(dt.Rows[iRow][5], "Weight"); // length / width / eight item._length = ParseObjectToDouble(dt.Rows[iRow][6], "Length"); item._width = ParseObjectToDouble(dt.Rows[iRow][7], "Width");; item._height = ParseObjectToDouble(dt.Rows[iRow][8], "Height");; listItems.Add(item); } catch (ExcelDataException ex) { _log.InfoFormat("Row {0} - {1} is null or empty -> skipping...", iRow, ex.Message); } catch (Exception ex) { _log.ErrorFormat("Row = {0} -> {1}", iRow, ex.Message); } } } } // Pallets else if (string.Equals(m_sheets[iSheet].Name, "Palettes", StringComparison.CurrentCultureIgnoreCase)) { listPallets = new List <DataPalletINTEX>(); if (ReadWorksheet(m_sheets[iSheet])) { DataTable dt = m_sheets[iSheet].Data; for (int iRow = 4; iRow < dt.Rows.Count; ++iRow) { try { DataPalletINTEX pallet = new DataPalletINTEX(); if (DBNull.Value != dt.Rows[iRow][0]) { pallet._type = (string)dt.Rows[iRow][0]; } pallet._length = ParseObjectToDouble(dt.Rows[iRow][1], "Pallet length"); pallet._width = ParseObjectToDouble(dt.Rows[iRow][2], "Pallet width"); pallet._height = ParseObjectToDouble(dt.Rows[iRow][3], "Pallet height"); if (!DBNull.Value.Equals(dt.Rows[iRow][4])) { pallet._weight = double.Parse((string)dt.Rows[iRow][4], System.Globalization.CultureInfo.InvariantCulture); } listPallets.Add(pallet); } catch (ExcelDataException ex) { _log.InfoFormat("Row {0} - {1} is null or empty -> skipping...", iRow, ex.Message); } catch (Exception ex) { _log.ErrorFormat("Row = {0} -> {1}", iRow, ex.Message); } } } } // Caisses else if (string.Equals(m_sheets[iSheet].Name, "Caisses", StringComparison.CurrentCultureIgnoreCase)) { listCases = new List <DataCaseINTEX>(); if (ReadWorksheet(m_sheets[iSheet])) { DataTable dt = m_sheets[iSheet].Data; for (int iRow = 4; iRow < dt.Rows.Count; ++iRow) { try { DataCaseINTEX caseItem = new DataCaseINTEX(); caseItem._ref = ParseObjectToString(dt.Rows[iRow][0], "Ref"); caseItem._lengthExt = ParseObjectToDouble(dt.Rows[iRow][1], "Case length Ext."); caseItem._widthExt = ParseObjectToDouble(dt.Rows[iRow][2], "Case width Ext."); caseItem._heightExt = ParseObjectToDouble(dt.Rows[iRow][3], "Case height Ext."); if (!DBNull.Value.Equals(dt.Rows[iRow][4])) { caseItem._lengthInt = double.Parse((string)dt.Rows[iRow][4], System.Globalization.CultureInfo.InvariantCulture); } if (!DBNull.Value.Equals(dt.Rows[iRow][5])) { caseItem._widthInt = double.Parse((string)dt.Rows[iRow][5], System.Globalization.CultureInfo.InvariantCulture); } if (!DBNull.Value.Equals(dt.Rows[iRow][6])) { caseItem._heightInt = double.Parse((string)dt.Rows[iRow][6], System.Globalization.CultureInfo.InvariantCulture); } if (!DBNull.Value.Equals(dt.Rows[iRow][7])) { caseItem._weight = double.Parse((string)dt.Rows[iRow][7], System.Globalization.CultureInfo.InvariantCulture); } listCases.Add(caseItem); } catch (ExcelDataException ex) { _log.InfoFormat("Row {0} - {1} is null or empty -> skipping...", iRow, ex.Message); } catch (Exception ex) { _log.Error(ex.ToString()); } } } } } m_globals.SST = null; m_globals = null; m_sheets = null; m_stream = null; hdr = null; GC.Collect(); }
public ExcelDataReader(Stream file, ref List <DataItemINTEX> listItems, ref List <DataPalletINTEX> listPallets, ref List <DataCaseINTEX> listCases) { XlsHeader hdr = XlsHeader.ReadHeader(file); XlsRootDirectory dir = new XlsRootDirectory(hdr); XlsDirectoryEntry workbookEntry = dir.FindEntry("Workbook"); if (workbookEntry == null) { workbookEntry = dir.FindEntry("Book"); } if (workbookEntry == null) { throw new FileNotFoundException("Oops! Neither stream 'Workbook' nor 'Book' was found in file"); } if (workbookEntry.EntryType != STGTY.STGTY_STREAM) { throw new FormatException("Oops! Workbook directory entry is not a Stream"); } m_stream = new XlsBiffStream(hdr, workbookEntry.StreamFirstSector); ReadWorkbookGlobals(); GC.Collect(); m_workbookData = new DataSet(); // first sheet : boxes for (int iSheet = 0; iSheet < m_sheets.Count; ++iSheet) { if (string.Equals(m_sheets[iSheet].Name, "Articles", StringComparison.CurrentCultureIgnoreCase)) { listItems = new List <DataItemINTEX>(); if (ReadWorksheet(m_sheets[iSheet])) { DataTable dt = m_sheets[iSheet].Data; for (int iRow = 4; iRow < dt.Rows.Count; ++iRow) { try { DataItemINTEX item = new DataItemINTEX(); item._ref = (string)dt.Rows[iRow][0]; item._description = (string)dt.Rows[iRow][1]; if (DBNull.Value != dt.Rows[iRow][2]) { item._UPC = (string)dt.Rows[iRow][2]; } if (DBNull.Value != dt.Rows[iRow][3]) { item._PCB = Convert.ToInt32((string)dt.Rows[iRow][3]); } if (DBNull.Value != dt.Rows[iRow][4]) { item._gencode = (string)dt.Rows[iRow][4]; } item._weight = double.Parse((string)dt.Rows[iRow][5], System.Globalization.CultureInfo.InvariantCulture); item._length = double.Parse((string)dt.Rows[iRow][6], System.Globalization.CultureInfo.InvariantCulture); item._width = double.Parse((string)dt.Rows[iRow][7], System.Globalization.CultureInfo.InvariantCulture); item._height = double.Parse((string)dt.Rows[iRow][8], System.Globalization.CultureInfo.InvariantCulture); listItems.Add(item); } catch (Exception /*ex*/) { } } } } // Pallets else if (string.Equals(m_sheets[iSheet].Name, "Palettes", StringComparison.CurrentCultureIgnoreCase)) { listPallets = new List <DataPalletINTEX>(); if (ReadWorksheet(m_sheets[iSheet])) { DataTable dt = m_sheets[iSheet].Data; for (int iRow = 4; iRow < dt.Rows.Count; ++iRow) { try { DataPalletINTEX pallet = new DataPalletINTEX(); pallet._type = (string)dt.Rows[iRow][0]; pallet._length = double.Parse((string)dt.Rows[iRow][1], System.Globalization.CultureInfo.InvariantCulture); pallet._width = double.Parse((string)dt.Rows[iRow][2], System.Globalization.CultureInfo.InvariantCulture); pallet._height = double.Parse((string)dt.Rows[iRow][3], System.Globalization.CultureInfo.InvariantCulture); if (!DBNull.Value.Equals(dt.Rows[iRow][4])) { pallet._weight = double.Parse((string)dt.Rows[iRow][4], System.Globalization.CultureInfo.InvariantCulture); } listPallets.Add(pallet); } catch (Exception /*ex*/) { } } } } // Caisses else if (string.Equals(m_sheets[iSheet].Name, "Caisses", StringComparison.CurrentCultureIgnoreCase)) { listCases = new List <DataCaseINTEX>(); if (ReadWorksheet(m_sheets[iSheet])) { DataTable dt = m_sheets[iSheet].Data; for (int iRow = 4; iRow < dt.Rows.Count; ++iRow) { try { DataCaseINTEX caseItem = new DataCaseINTEX(); caseItem._ref = (string)dt.Rows[iRow][0]; caseItem._lengthExt = double.Parse((string)dt.Rows[iRow][1], System.Globalization.CultureInfo.InvariantCulture); caseItem._widthExt = double.Parse((string)dt.Rows[iRow][2], System.Globalization.CultureInfo.InvariantCulture); caseItem._heightExt = double.Parse((string)dt.Rows[iRow][3], System.Globalization.CultureInfo.InvariantCulture); if (!DBNull.Value.Equals(dt.Rows[iRow][4])) { caseItem._lengthInt = double.Parse((string)dt.Rows[iRow][4], System.Globalization.CultureInfo.InvariantCulture); } if (!DBNull.Value.Equals(dt.Rows[iRow][5])) { caseItem._widthInt = double.Parse((string)dt.Rows[iRow][5], System.Globalization.CultureInfo.InvariantCulture); } if (!DBNull.Value.Equals(dt.Rows[iRow][6])) { caseItem._heightInt = double.Parse((string)dt.Rows[iRow][6], System.Globalization.CultureInfo.InvariantCulture); } if (!DBNull.Value.Equals(dt.Rows[iRow][7])) { caseItem._weight = double.Parse((string)dt.Rows[iRow][7], System.Globalization.CultureInfo.InvariantCulture); } listCases.Add(caseItem); } catch (Exception /*ex*/) { } } } } } m_globals.SST = null; m_globals = null; m_sheets = null; m_stream = null; hdr = null; GC.Collect(); }