2025-04-24 20:56:10 +08:00
|
|
|
|
|
2025-02-10 20:53:40 +08:00
|
|
|
|
using Autodesk.Revit.DB;
|
2025-04-24 20:56:10 +08:00
|
|
|
|
|
2025-02-10 20:53:40 +08:00
|
|
|
|
using Autodesk.Revit.UI;
|
|
|
|
|
|
|
|
|
|
|
|
using Nice3point.Revit.Toolkit.External;
|
|
|
|
|
|
|
2025-04-24 20:56:10 +08:00
|
|
|
|
using Sai.RvKits.Assists;
|
|
|
|
|
|
|
|
|
|
|
|
using System.IO;
|
2025-02-10 20:53:40 +08:00
|
|
|
|
|
|
|
|
|
|
using WPFluent.Controls;
|
|
|
|
|
|
|
|
|
|
|
|
namespace ShrlAlgo.RvKits.RvView;
|
|
|
|
|
|
|
|
|
|
|
|
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
|
|
|
|
|
|
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
|
|
|
|
|
|
public class ExportSchedulesCmd : ExternalCommand
|
|
|
|
|
|
{
|
|
|
|
|
|
public override void Execute()
|
|
|
|
|
|
{
|
|
|
|
|
|
var list = Document.OfCollector().OfClass(typeof(ViewSchedule)).OfCategory(BuiltInCategory.OST_Schedules).Cast<ViewSchedule>().ToList();
|
|
|
|
|
|
if (!list.Any())
|
|
|
|
|
|
{
|
|
|
|
|
|
ErrorMessage = "当前项目不存在明细表";
|
|
|
|
|
|
Result = Result.Failed;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
var browserWindow = new VistaFolderBrowserDialog();
|
|
|
|
|
|
browserWindow.ShowDialog();
|
|
|
|
|
|
var selectedPath = browserWindow.SelectedPath;
|
|
|
|
|
|
if (selectedPath == null || !Directory.Exists(selectedPath))
|
|
|
|
|
|
{
|
|
|
|
|
|
//var manager = new NotificationMessageManager();
|
|
|
|
|
|
//manager.CreateMessage().Accent("#1751C3").Background("#333").HasBadge("净高").HasMessage("未选择文件夹").Queue();
|
|
|
|
|
|
Result = Result.Cancelled;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var path = $"{selectedPath}\\导出的明细表.xlsx";
|
|
|
|
|
|
|
|
|
|
|
|
EPPlusHelper.WriteExcel(
|
|
|
|
|
|
path,
|
|
|
|
|
|
m =>
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (var viewSchedule in list)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!viewSchedule.CanHaveTypeAssigned())
|
|
|
|
|
|
{
|
|
|
|
|
|
continue;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var sheet = m.Workbook.Worksheets.Add(viewSchedule.Name);
|
|
|
|
|
|
var td = viewSchedule.GetTableData();
|
|
|
|
|
|
|
|
|
|
|
|
//TableSectionData tdb = td.GetSectionData(SectionType.Header);
|
|
|
|
|
|
//int hc = tdb.NumberOfColumns;
|
|
|
|
|
|
//int hr = tdb.NumberOfRows;
|
|
|
|
|
|
//for (int i = 0; i < hr; i++)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// for (int j = 0; j < hc; j++)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// //Autodesk.Revit.DB.CellType ctype = tdd.GetCellType(i, j);
|
|
|
|
|
|
// string str = viewSchedule.GetCellText(SectionType.Header, i, j);
|
|
|
|
|
|
// sheet.Cells[i + 1, j + 1].Value = str;
|
|
|
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
var tdd = td.GetSectionData(SectionType.Body);
|
|
|
|
|
|
var c = tdd.NumberOfColumns;
|
|
|
|
|
|
var r = tdd.NumberOfRows;
|
|
|
|
|
|
for (var i = 0; i < r; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
for (var j = 0; j < c; j++)
|
|
|
|
|
|
{
|
|
|
|
|
|
sheet.Cells[i + 1, j + 1].Value = viewSchedule.GetCellText(SectionType.Body, i, j);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
EPPlusHelper.SetStyle(sheet, 1, sheet.Dimension.Rows, 1, sheet.Dimension.Columns);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
);
|
2025-04-24 20:56:10 +08:00
|
|
|
|
ShrlAlgo.Toolkit.Core.Assist.WinDialogHelper.OpenFolderAndSelectFile(path);
|
2025-02-10 20:53:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|