using System; using System.Data; using System.IO; using HH.WMS.Utils.ExcelLibrary.SpreadSheet; namespace HH.WMS.Utils.ExcelLibrary { /// /// Provides simple way to convert Excel workbook into DataSet /// public sealed class DataSetHelper { /// /// Populate all data (all converted into String) in all worksheets /// from a given Excel workbook. /// /// File path of the Excel workbook /// DataSet with all worksheet populate into DataTable public static DataSet CreateDataSet(String filePath) { DataSet ds = new DataSet(); Workbook workbook = Workbook.Load(filePath); foreach (Worksheet ws in workbook.Worksheets) { DataTable dt = PopulateDataTable(ws); ds.Tables.Add(dt); } return ds; } /// /// Populate data (all converted into String) from a given Excel /// workbook and also work sheet name into a new instance of DataTable. /// Returns null if given work sheet is not found. /// /// File path of the Excel workbook /// Worksheet name in workbook /// DataTable with populate data public static DataTable CreateDataTable(String filePath, String sheetName) { Workbook workbook = Workbook.Load(filePath); foreach (Worksheet ws in workbook.Worksheets) { if (ws.Name.Equals(sheetName)) return PopulateDataTable(ws); } return null; } private static DataTable PopulateDataTable(Worksheet ws) { CellCollection Cells = ws.Cells; // Creates DataTable from a Worksheet // All values will be treated as Strings DataTable dt = new DataTable(ws.Name); // Extract columns for (int i = 0; i <= Cells.LastColIndex; i++) dt.Columns.Add(Cells[0, i].StringValue, typeof(String)); // Extract data for (int currentRowIndex = 1; currentRowIndex <= Cells.LastRowIndex; currentRowIndex++) { DataRow dr = dt.NewRow(); for (int currentColumnIndex = 0; currentColumnIndex <= Cells.LastColIndex; currentColumnIndex++) dr[currentColumnIndex] = Cells[currentRowIndex, currentColumnIndex].StringValue; dt.Rows.Add(dr); } return dt; } /// /// Populate all data from the given DataSet into a new Excel workbook /// /// File path to new Excel workbook to be created /// Source DataSet public static void CreateWorkbook(String filePath, DataSet dataset) { if (dataset.Tables.Count == 0) throw new ArgumentException("DataSet needs to have at least one DataTable", "dataset"); Workbook workbook = new Workbook(); foreach (DataTable dt in dataset.Tables) { Worksheet worksheet = new Worksheet(dt.TableName); for (int i = 0; i < dt.Columns.Count; i++) { // Add column header worksheet.Cells[0, i] = new Cell(dt.Columns[i].ColumnName); // Populate row data for (int j = 0; j < dt.Rows.Count; j++) worksheet.Cells[j + 1, i] = new Cell(dt.Rows[j][i]); } workbook.Worksheets.Add(worksheet); } workbook.Save(filePath); } public static void CreateWorkbook(Stream stream, DataSet dataset) { if (dataset.Tables.Count == 0) throw new ArgumentException("DataSet needs to have at least one DataTable", "dataset"); Workbook workbook = new Workbook(); foreach (DataTable dt in dataset.Tables) { Worksheet worksheet = new Worksheet(dt.TableName); for (int i = 0; i < dt.Columns.Count; i++) { // Add column header worksheet.Cells[0, i] = new Cell(dt.Columns[i].ColumnName); // Populate row data for (int j = 0; j < dt.Rows.Count; j++) worksheet.Cells[j + 1, i] = new Cell(dt.Rows[j][i]); } workbook.Worksheets.Add(worksheet); } workbook.SaveToStream(stream); } } }