优化更新代码,添加界面功能并整合
This commit is contained in:
181
ShrlAlgo.Toolkit.Revit/Assist/ScheduleAssist.cs
Normal file
181
ShrlAlgo.Toolkit.Revit/Assist/ScheduleAssist.cs
Normal file
@@ -0,0 +1,181 @@
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using Autodesk.Revit.DB;
|
||||
using OfficeOpenXml;
|
||||
|
||||
namespace ShrlAlgo.Toolkit.Revit.Assist
|
||||
{
|
||||
/// <summary>
|
||||
/// 明细表转换类
|
||||
/// </summary>
|
||||
public static class ScheduleAssist
|
||||
{
|
||||
/// <summary>
|
||||
/// 导出明细表
|
||||
/// </summary>
|
||||
/// <param name="viewSchedule"></param>
|
||||
/// <param name="path"></param>
|
||||
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();
|
||||
}
|
||||
;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 明细表转换为datable
|
||||
/// </summary>
|
||||
/// <param name="colNames"></param>
|
||||
/// <returns></returns>
|
||||
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<int>();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 明细表转换为datable
|
||||
/// </summary>
|
||||
/// <param name="view"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 明细表转DataTable
|
||||
/// </summary>
|
||||
/// <param name="viewSchedule"></param>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user