using Autodesk.Revit.DB; using OfficeOpenXml; using System.Data; using System.IO; namespace ShrlAlgoToolkit.Revit.Extensions { /// /// 明细表转换类 /// public static class ScheduleExtensions { /// /// 导出明细表 /// /// /// public static void ScheduleToExcel(this ViewSchedule viewSchedule, string path) { var td = viewSchedule.GetTableData(); var tdb = td.GetSectionData(SectionType.Header); var head = viewSchedule.GetCellText(SectionType.Header, 0, 0); var tdd = td.GetSectionData(SectionType.Body); var hc = tdb.NumberOfColumns; var hr = tdb.NumberOfRows; var c = tdd.NumberOfColumns; var r = tdd.NumberOfRows; var fi = new FileInfo(path); using (var package = new ExcelPackage(fi)) { var worksheet = package.Workbook.Worksheets[1]; //var worksheet = package.Workbook.Worksheets["基本构件"]; for (var i = 0; i < r; i++) { for (var j = 0; j < c; j++) { var ctype = tdd.GetCellType(i, j); var str = viewSchedule.GetCellText(SectionType.Body, i, j); worksheet.Cells[i, j].Value = viewSchedule.GetCellText(SectionType.Body, i, j); } } package.Save(); } ; } /// /// 明细表转换为datable /// /// /// public static DataTable ToDataTable(this ViewSchedule view, params string[] colNames) { if (view is null) throw new ArgumentNullException(nameof(view)); if (view is null) throw new NullReferenceException(nameof(view)); var table = view.GetTableData(); var body = table.GetSectionData(SectionType.Body); var colNum = body.NumberOfColumns; var rowNum = body.NumberOfRows; var result = new DataTable { TableName = view.GetCellText(SectionType.Header, 0, 0) }; var colIndexs = new List(); for (var i = 0; i < 3; i++) { for (var j = 0; j < colNum; j++) { if (colIndexs.Contains(j)) continue; var cellText = view.GetCellText(SectionType.Body, i, j); if (colNames.Contains(cellText)) { colIndexs.Add(j); result.Columns.Add(cellText); } if (result.Columns.Count == colNames.Length) break; } if (result.Columns.Count == colNames.Length) break; } for (var i = 0; i < rowNum; i++) { var row = result.NewRow(); for (var j = 0; j < colIndexs.Count; j++) row[j] = view.GetCellText(SectionType.Body, i, colIndexs[j]); result.Rows.Add(row); } return result; } /// /// 明细表转换为datable /// /// /// public static DataTable ToDataTable(this ViewSchedule view) { if (view is null) throw new ArgumentNullException(nameof(view)); var table = view.GetTableData(); var body = table.GetSectionData(SectionType.Body); var colNum = body.NumberOfColumns; var rowNum = body.NumberOfRows; var result = new DataTable { TableName = view.GetCellText(SectionType.Header, 0, 0) }; for (var i = 0; i < colNum; i++) result.Columns.Add(); for (var i = 0; i < rowNum; i++) { var row = result.NewRow(); for (var j = 0; j < colNum; j++) row[j] = view.GetCellText(SectionType.Body, i, j); result.Rows.Add(row); } return result; } /// /// 明细表转DataTable /// /// /// private static DataTable ViewScheduleToDataTable(this ViewSchedule viewSchedule) { var dt = new DataTable(); var rowCount = viewSchedule.GetTableData().GetSectionData(SectionType.Body).NumberOfRows; var colCount = viewSchedule.GetTableData().GetSectionData(SectionType.Body).NumberOfColumns; var headers = viewSchedule.GetTableData().GetSectionData(SectionType.Header); for (var i = 0; i < colCount; i++) { var header = viewSchedule.GetCellText(SectionType.Header, 0, i); dt.Columns.Add(header); } for (var i = 0; i < rowCount; i++) { var dr = dt.NewRow(); for (var j = 0; j < colCount; j++) { dr[j] = viewSchedule.GetCellText(SectionType.Body, i, j); } dt.Rows.Add(dr); } return dt; } } }