鱼C论坛

 找回密码
 立即注册
查看: 1757|回复: 21

[已解决]求助一下,有没有大神写过关于revit的python脚本之类的东西

[复制链接]
发表于 2023-12-25 11:27:16 | 显示全部楼层 |阅读模式
5鱼币
小弟,现在急需一个插件或者脚本能在多个revit项目文件里导出软件自带的明细表,这个东西可以手动操作导出,但是就是项目文件有点多,想偷个懒
如果有大神有写过的最好,有类似的能参考亦可,如果有大神现写,那就感激万分
最佳答案
2023-12-25 11:27:17
帅昊昊昊 发表于 2023-12-25 15:57
谢谢你的帮助,虽然问题还是没有解决,我想再试试别的 ...

不客气!如果你想尝试其他方式,我也可以给出另一个思路。你可以考虑使用Revit插件开发框架PyRevit来编写Python脚本。PyRevit提供了一套简单易用的API,可以帮助你在Revit中进行快速开发和自动化操作。以下是一些示例代码,展示了如何使用PyRevit来导出所有项目文件中的明细表:
import pyrevit# 获取所有打开的文档docs = pyrevit.revit.get_active_docs()# 遍历所有文档for doc in docs:    try:        # 获取文档中的所有明细表视图        schedules = pyrevit.revit.query.get_all_schedules(doc)                # 遍历每个明细表视图        for schedule in schedules:            # 导出为CSV文件            schedule.save_as_csv()                        print('成功导出明细表:', schedule.csv_file)                except Exception as e:        print('导出失败:', str(e))
这段代码使用了PyRevit中的一些功能,如`get_active_docs()`来获取所有打开的文档,`query.get_all_schedules(doc)`来获取文档中的所有明细表视图,以及`schedules.save_as_csv()`来将明细表导出为CSV文件。

请注意,你需要先安装并配置好PyRevit,然后将以上代码粘贴到PyRevit的Python Shell中执行。如果你之前没有使用过PyRevit,可以参考它们的官方文档来了解更多。希望这个方法对你有所帮助!祝你好运,如果还有任何问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

revit文件到处一个excel

revit文件到处一个excel

最佳答案

查看完整内容

不客气!如果你想尝试其他方式,我也可以给出另一个思路。你可以考虑使用Revit插件开发框架PyRevit来编写Python脚本。PyRevit提供了一套简单易用的API,可以帮助你在Revit中进行快速开发和自动化操作。以下是一些示例代码,展示了如何使用PyRevit来导出所有项目文件中的明细表: 这段代码使用了PyRevit中的一些功能,如`get_active_docs()`来获取所有打开的文档,`query.get_all_schedules(doc)`来获取文档中的所有明细表视图 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 11:27:17 | 显示全部楼层    本楼为最佳答案   
帅昊昊昊 发表于 2023-12-25 15:57
谢谢你的帮助,虽然问题还是没有解决,我想再试试别的 ...

不客气!如果你想尝试其他方式,我也可以给出另一个思路。你可以考虑使用Revit插件开发框架PyRevit来编写Python脚本。PyRevit提供了一套简单易用的API,可以帮助你在Revit中进行快速开发和自动化操作。以下是一些示例代码,展示了如何使用PyRevit来导出所有项目文件中的明细表:
import pyrevit# 获取所有打开的文档docs = pyrevit.revit.get_active_docs()# 遍历所有文档for doc in docs:    try:        # 获取文档中的所有明细表视图        schedules = pyrevit.revit.query.get_all_schedules(doc)                # 遍历每个明细表视图        for schedule in schedules:            # 导出为CSV文件            schedule.save_as_csv()                        print('成功导出明细表:', schedule.csv_file)                except Exception as e:        print('导出失败:', str(e))
这段代码使用了PyRevit中的一些功能,如`get_active_docs()`来获取所有打开的文档,`query.get_all_schedules(doc)`来获取文档中的所有明细表视图,以及`schedules.save_as_csv()`来将明细表导出为CSV文件。

请注意,你需要先安装并配置好PyRevit,然后将以上代码粘贴到PyRevit的Python Shell中执行。如果你之前没有使用过PyRevit,可以参考它们的官方文档来了解更多。希望这个方法对你有所帮助!祝你好运,如果还有任何问题,请随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 11:27:37 | 显示全部楼层
嗨!关于Revit的Python脚本,我没有直接写过,但我可以给你提供一些思路和示例代码来解决你的问题。

首先,你需要使用Revit API来操作Revit软件。Revit API是一套允许开发者使用C#、VB.NET或Python等编程语言与Revit进行交互的接口。因此,你需要安装"Revit Python Shell"插件,这样你就能够在Revit中运行Python脚本了。

接下来,我们来解决你的问题。你需要遍历所有的Revit项目文件,并从每个文件中导出软件自带的明细表。下面是一个简单的示例代码:
import clr # 导入clr模块clr.AddReference('RevitAPI') # 添加对RevitAPI的引用from Autodesk.Revit.DB import * # 导入RevitAPI中的所有类# 遍历所有的Revit项目文件def process_files(file_paths):    for file_path in file_paths:        try:            doc = Document.Load(file_path) # 加载Revit项目文件            collector = FilteredElementCollector(doc) # 创建ElementCollector对象            views = collector.OfClass(ViewSchedule).ToElements() # 获取所有的明细表视图            for view in views:                export_options = ExportTableOptions() # 创建导出选项对象                exporter = IFCExportUtils.CreateIFCExporter() # 创建导出器对象                view_name = view.Name + '.csv' # 定义导出文件名                export_path = '导出路径' + view_name # 定义导出路径                exporter.ExportUI(doc, view, export_options) # 导出明细表视图为CSV文件                print('成功导出明细表:' + export_path)        except Exception as e:            print('导出失败:' + str(e))# 定义Revit项目文件路径列表file_paths = [    'Revit项目文件1.rvt',    'Revit项目文件2.rvt',    'Revit项目文件3.rvt']# 调用函数处理Revit项目文件process_files(file_paths)
在示例代码中,我们使用Revit API中的`FilteredElementCollector`类来获取所有的明细表视图,并使用`IFCExportUtils`类将每个明细表导出为CSV文件。

请注意,在以上示例代码中需要你自己修改两个地方:
1. 定义导出路径:你需要修改`export_path`变量的值,将其定义为你想要导出的明细表文件存储的路径。
2. 定义Revit项目文件路径列表:你需要修改`file_paths`变量的值,将其定义为你想要处理的Revit项目文件的路径列表。

希望这能帮到你!如果你有其他问题,随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 11:32:06 | 显示全部楼层
FishC 发表于 2023-12-25 11:27
嗨!关于Revit的Python脚本,我没有直接写过,但我可以给你提供一些思路和示例代码来解决你的问题。

首先 ...

这个插件不是在项目文件打开的状态才能运行吗,那样怎么做到多个项目文件导出呢,是自动关闭然后打开新项目然后导出,这种循环操作吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 11:32:20 | 显示全部楼层
帅昊昊昊 发表于 2023-12-25 11:32
这个插件不是在项目文件打开的状态才能运行吗,那样怎 ...

非常抱歉,我之前的回答可能有误导之处。你是正确的,使用Revit API需要在打开的项目文件中进行操作。要实现对多个项目文件的批量导出,可以采取以下方法:

1. 创建一个包含所有项目文件路径的列表。
file_paths = ['project1.rvt', 'project2.rvt', 'project3.rvt']
2. 使用`revitpythonshell`插件(或其他Revit的Python脚本环境)打开Revit软件,并加载Revit API。

3. 编写一个循环,在每次迭代中打开一个项目文件、导出明细表并关闭文件。

示例代码如下所示:
import clrclr.AddReference('RevitAPI')from Autodesk.Revit.DB import *# 定义Revit项目文件路径列表file_paths = ['project1.rvt', 'project2.rvt', 'project3.rvt']# 打开Revit软件并加载Revit APIapp = __revit__.Applicationdoc = app.NewProjectDocument(UnitSystem.Metric)try:    for file_path in file_paths:        try:            doc.Close(False) # 关闭当前打开的项目文件            # 打开新的项目文件            open_options = OpenOptions()            new_doc = app.OpenDocumentFile(file_path, open_options)                collector = FilteredElementCollector(new_doc)            views = collector.OfClass(ViewSchedule).ToElements()                for view in views:                export_options = ExportTableOptions()                exporter = IFCExportUtils.CreateIFCExporter()                view_name = view.Name + '.csv'                export_path = '导出路径' + view_name                exporter.ExportUI(new_doc, view, export_options)                print('成功导出明细表:' + export_path)                new_doc.Close(False) # 关闭新的项目文件        except Exception as e:            print('导出失败:' + str(e))except Exception as e:    print('打开项目文件失败:' + str(e))
这是一个简单的示例,以展示大致的步骤。注意,具体操作可能因你的环境和需求而有所差异。确保根据自己的实际情况修改代码中的路径和其他相关信息。

希望这次能帮到你!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 15:06:52 | 显示全部楼层
FishC 发表于 2023-12-25 11:32
非常抱歉,我之前的回答可能有误导之处。你是正确的,使用Revit API需要在打开的项目文件中进行操作。要 ...

按照如上所示代码,在revit里面的revitpythonshell插件运行过后,出现报错,报错内容为
导出失败:expected ModelPath, got str
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 15:07:09 | 显示全部楼层
帅昊昊昊 发表于 2023-12-25 15:06
按照如上所示代码,在revit里面的revitpythonshell插 ...

非常抱歉,我之前的代码中有一个错误。导出函数`IFCExportUtils.CreateIFCExporter()`期望接收一个`ModelPath`对象作为参数,但我却传入了一个字符串。下面是修复后的代码:import clrclr.AddReference('RevitAPI')from Autodesk.Revit.DB import *from Autodesk.Revit.DB.IFC import *# 定义Revit项目文件路径列表file_paths = # 打开Revit软件并加载Revit APIapp = __revit__.Applicationdoc = app.NewProjectDocument(UnitSystem.Metric)try:    for file_path in file_paths:        try:            doc.Close(False) # 关闭当前打开的项目文件            # 打开新的项目文件            open_options = OpenOptions()            new_doc = app.OpenDocumentFile(file_path, open_options)            collector = FilteredElementCollector(new_doc)            views = collector.OfClass(ViewSchedule).ToElements()            for view in views:                export_options = IFCExportOptions() # 使用IFCExportOptions导出选项                export_options.ExporterBaseFilename = "导出路径" # 设置导出路径                exporter = IFCExporter.Create(new_doc, export_options) # 创建IFCExporter对象                view_name = view.Name + '.csv'                export_path = '导出路径' + view_name                # 导出明细表视图为CSV文件                result = exporter.Export(view.Id, export_path)                if result == ExporterIFCResults.Success:                    print('成功导出明细表:' + export_path)                else:                    print('导出失败:' + result)                new_doc.Close(False) # 关闭新的项目文件        except Exception as e:            print('导出失败:' + str(e))except Exception as e:    print('打开项目文件失败:' + str(e))修改后的代码中,我们使用`IFCExportOptions`代替`ExportTableOptions`来设置导出选项,并使用`IFCExporter.Create`方法创建`IFCExporter`对象。最后,我们使用`exporter.Export`方法来导出明细表视图为CSV文件,并检查返回的结果来判断导出是否成功。希望这次能够解决你的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 15:16:08 | 显示全部楼层
FishC 发表于 2023-12-25 15:07
非常抱歉,我之前的代码中有一个错误。导出函数`IFCExportUtils.CreateIFCExporter()`期望接收一个`Model ...

问题没有得到解决,报错内容还是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 15:16:29 | 显示全部楼层
帅昊昊昊 发表于 2023-12-25 15:16
问题没有得到解决,报错内容还是一样的

非常抱歉,还是有一些问题。为了解决这个问题,我们应该使用`ModelPath`对象而不是字符串作为导出路径。下面是修复后的代码:
import clrclr.AddReference('RevitAPI')from Autodesk.Revit.DB import *from Autodesk.Revit.DB.IFC import *# 定义Revit项目文件路径列表file_paths = # 打开Revit软件并加载Revit APIapp = __revit__.Applicationdoc = app.NewProjectDocument(UnitSystem.Metric)try:    for file_path in file_paths:        try:            doc.Close(False) # 关闭当前打开的项目文件            # 打开新的项目文件            open_options = OpenOptions()            new_doc = app.OpenDocumentFile(file_path, open_options)            collector = FilteredElementCollector(new_doc)            views = collector.OfClass(ViewSchedule).ToElements()                        for view in views:                export_options = IFCExportOptions() # 使用IFCExportOptions导出选项                export_path = ModelPathUtils.ConvertUserVisiblePathToModelPath("导出路径") # 设置导出路径                export_options.SetFilePath(export_path)                exporter = IFCExporter.Create(new_doc, export_options) # 创建IFCExporter对象                view_name = view.Name + '.csv'                export_path = "导出路径" + view_name                # 导出明细表视图为CSV文件                result = exporter.Export(view.Id, export_path)                                if result == ExporterIFCResults.Success:                    print('成功导出明细表:' + export_path)                else:                    print('导出失败:' + result)                                new_doc.Close(False) # 关闭新的项目文件        except Exception as e:            print('导出失败:' + str(e))except Exception as e:    print('打开项目文件失败:' + str(e))
这次修改后的代码,使用`ModelPathUtils.ConvertUserVisiblePathToModelPath`方法将用户可见路径转换为`ModelPath`对象,并使用`export_options.SetFilePath`方法来设置导出路径。希望这次能够解决你的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 15:23:03 | 显示全部楼层
FishC 发表于 2023-12-25 15:16
非常抱歉,还是有一些问题。为了解决这个问题,我们应该使用`ModelPath`对象而不是字符串作为导出路径。 ...

你上述修改的代码中导出路径的变量export_path 好像定义了两次,似乎没有修改成功
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 15:23:17 | 显示全部楼层
帅昊昊昊 发表于 2023-12-25 15:23
你上述修改的代码中导出路径的变量export_path 好像定 ...

非常抱歉,我之前的回答中出现了错误。确实是定义了两次相同的变量名导致了混淆。以下是经过修改的代码:
import clrclr.AddReference('RevitAPI')from Autodesk.Revit.DB import *from Autodesk.Revit.DB.IFC import *# 定义Revit项目文件路径列表file_paths = # 你需要填入Revit项目文件的路径列表# 打开Revit软件并加载Revit APIapp = __revit__.Applicationdoc = app.NewProjectDocument(UnitSystem.Metric)try:    for file_path in file_paths:        try:            doc.Close(False) # 关闭当前打开的项目文件                        # 打开新的项目文件            open_options = OpenOptions()            new_doc = app.OpenDocumentFile(file_path, open_options)            collector = FilteredElementCollector(new_doc)            views = collector.OfClass(ViewSchedule).ToElements()            for view in views:                export_options = IFCExportOptions() # 使用IFCExportOptions导出选项                export_path = ModelPathUtils.ConvertUserVisiblePathToModelPath("导出路径") # 设置导出路径                export_options.SetFilePath(export_path)                exporter = IFCExporter.Create(new_doc, export_options) # 创建IFCExporter对象                view_name = view.Name + '.csv'                export_full_path = "导出路径" + view_name # 导出的完整路径和文件名                # 导出明细表视图为CSV文件                result = exporter.Export(view.Id, export_full_path)                if result == ExporterIFCResults.Success:                    print('成功导出明细表:' + export_full_path)                else:                    print('导出失败:' + result)            new_doc.Close(False) # 关闭新的项目文件        except Exception as e:            print('导出失败:' + str(e))except Exception as e:    print('打开项目文件失败:' + str(e))
对于导出路径,在代码中的`"导出路径"`处你需要填入你想要导出的路径。另外,由于我不清楚你想要将明细表导出为什么格式(例如CSV),你可能需要适当调整导出选项和导出路径的设置。希望这次修改能够解决你的问题!如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 15:29:04 | 显示全部楼层
FishC 发表于 2023-12-25 15:23
非常抱歉,我之前的回答中出现了错误。确实是定义了两次相同的变量名导致了混淆。以下是经过修改的代码: ...

很抱歉,该错误还是存在
导出失败:expected ModelPath, got str
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 15:29:17 | 显示全部楼层
帅昊昊昊 发表于 2023-12-25 15:29
很抱歉,该错误还是存在导出失败:expected ModelPath ...

非常抱歉再次出现错误。问题出在 `export_path` 上,它应该是一个 `ModelPath` 对象而不是字符串。以下是修改后的代码示例:import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.IFC import *
# 定义Revit项目文件路径列表
file_paths = # 你需要填入Revit项目文件的路径列表
# 打开Revit软件并加载Revit API
app = __revit__.Application
doc = app.NewProjectDocument(UnitSystem.Metric)
try:
    for file_path in file_paths:
        try:
            doc.Close(False) # 关闭当前打开的项目文件
            # 打开新的项目文件
            open_options = OpenOptions()
            new_doc = app.OpenDocumentFile(file_path, open_options)
            collector = FilteredElementCollector(new_doc)
            views = collector.OfClass(ViewSchedule).ToElements()
            for view in views:
                export_options = IFCExportOptions() # 使用IFCExportOptions导出选项
                folder_path = "导出文件夹路径"
                export_file_name = view.Name + '.csv'
                export_full_path = folder_path + "\\" + export_file_name # 导出的完整路径和文件名
                model_path = ModelPathUtils.ConvertUserVisiblePathToModelPath(export_full_path) # 将字符串转换为ModelPath对象
                export_options.SetFilePath(model_path) # 设置导出路径
                exporter = IFCExporter.Create(new_doc, export_options) # 创建IFCExporter对象
                # 导出明细表视图为CSV文件
                result = exporter.Export(view.Id)
                if result == ExporterIFCResults.Success:
                    print('成功导出明细表:' + export_full_path)
                else:
                    print('导出失败:' + result)
            new_doc.Close(False) # 关闭新的项目文件
        except Exception as e:
            print('导出失败:' + str(e))
except Exception as e:
    print('打开项目文件失败:' + str(e))
请确保将 `"导出文件夹路径"` 替换为你要导出文件的实际文件夹路径。这次修改应该能够解决你的问题。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 15:37:16 | 显示全部楼层
FishC 发表于 2023-12-25 15:29
非常抱歉再次出现错误。问题出在 `export_path` 上,它应该是一个 `ModelPath` 对象而不是字符串。以下是 ...

已经和这个错误杠上了,所有代码如上,请求别的解决办法
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.IFC import *


# 定义Revit项目文件路径列表
file_paths = ['C:\\Users\\Administrator\\Desktop\\text\\D1-1钢筋笼(L型)(24.26m墙).rvt']

# 打开Revit软件并加载
app = __revit__.Application
doc = app.NewProjectDocument(UnitSystem.Metric)


try:
    for file_path in file_paths:
        try:
            doc.Close(False) # 关闭当前打开的项目文件

            # 打开新的项目文件
            open_options = OpenOptions()
            new_doc = app.OpenDocumentFile(file_path, open_options)
            collector = FilteredElementCollector(new_doc)
            views = collector.OfClass(ViewSchedule).ToElements()


            for view in views:
                export_options = IFCExportOptions() # 使用IFCExportOptions导出选项
                folder_path = "C:\\Users\\Administrator\\Desktop\\text"
                export_file_name = view.Name + '.csv'
                export_full_path = folder_path + "\" + export_file_name # 导出的完整路径和文件名
                model_path = ModelPathUtils.ConvertUserVisiblePathToModelPath(export_full_path) # 将字符串转换为ModelPath对象
                


                export_options.SetFilePath(model_path)
                exporter = IFCExporter.Create(new_doc, export_options) # 创建IFCExporter对象
                
                # 导出明细表视图为CSV文件

                result = exporter.Export(view.Id, export_path)


                if result == ExporterIFCResults.Success:
                    print('成功导出明细表:' + export_path)
                else:
                    print('导出失败:' + result)
            new_doc.Close(False) # 关闭新的项目文件
        except Exception as e:
            print('导出失败:' + str(e))
except Exception as e:
    print('打开项目文件失败:' + str(e))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 15:37:28 | 显示全部楼层
帅昊昊昊 发表于 2023-12-25 15:37
已经和这个错误杠上了,所有代码如上,请求别的解决办 ...

非常抱歉,我之前给出的代码有一处错误。在导出明细表时,`export_path` 参数应该是一个 `ModelPath` 对象而不是一个字符串。以下是修正后的代码示例:
import clrclr.AddReference('RevitAPI')from Autodesk.Revit.DB import *from Autodesk.Revit.DB.IFC import *# 定义Revit项目文件路径列表file_paths = # 你需要填入Revit项目文件的路径列表# 打开Revit软件并加载app = __revit__.Applicationdoc = app.NewProjectDocument(UnitSystem.Metric)try:    for file_path in file_paths:        try:            doc.Close(False)  # 关闭当前打开的项目文件                        # 打开新的项目文件            open_options = OpenOptions()            new_doc = app.OpenDocumentFile(file_path, open_options)                        collector = FilteredElementCollector(new_doc)            views = collector.OfClass(ViewSchedule).ToElements()                        for view in views:                export_options = IFCExportOptions()  # 使用IFCExportOptions导出选项                folder_path = "C:\\Users\\Administrator\\Desktop\\text"                export_file_name = view.Name + '.csv'                export_full_path = folder_path + "\" + export_file_name  # 导出的完整路径和文件名                model_path = ModelPathUtils.ConvertUserVisiblePathToModelPath(export_full_path)  # 将字符串转换为ModelPath对象                                export_options.SetFilePath(model_path)                exporter = IFCExporter.Create(new_doc, export_options)  # 创建IFCExporter对象                                # 导出明细表视图为CSV文件                result = exporter.Export(view.Id)                                if result == ExporterIFCResults.Success:                    print('成功导出明细表:' + export_full_path)                else:                    print('导出失败:' + result)                        new_doc.Close(False)  # 关闭新的项目文件        except Exception as e:            print('导出失败:' + str(e))except Exception as e:    print('打开项目文件失败:' + str(e))
请确保将 `"C:\\Users\\Administrator\\Desktop\\text"` 替换为你要导出文件的实际文件夹路径。这次修改应该能够解决你的问题。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 15:43:25 | 显示全部楼层
FishC 发表于 2023-12-25 15:37
非常抱歉,我之前给出的代码有一处错误。在导出明细表时,`export_path` 参数应该是一个 `ModelPath` 对 ...

路径中的单反斜杆是不是书写错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 15:43:43 | 显示全部楼层
帅昊昊昊 发表于 2023-12-25 15:43
路径中的单反斜杆是不是书写错误

是的,我的错误。在Python中,反斜杠`\`被用作转义字符,所以你需要使用两个反斜杠来表示一个反斜杠。以下是修正后的代码示例:
import clrclr.AddReference('RevitAPI')from Autodesk.Revit.DB import *from Autodesk.Revit.DB.IFC import *# 定义Revit项目文件路径列表file_paths = # 你需要填入Revit项目文件的路径列表# 打开Revit软件并加载app = __revit__.Applicationdoc = app.NewProjectDocument(UnitSystem.Metric)try:    for file_path in file_paths:        try:            doc.Close(False)  # 关闭当前打开的项目文件            # 打开新的项目文件            open_options = OpenOptions()            new_doc = app.OpenDocumentFile(file_path, open_options)            collector = FilteredElementCollector(new_doc)            views = collector.OfClass(ViewSchedule).ToElements()            for view in views:                export_options = IFCExportOptions()  # 使用IFCExportOptions导出选项                folder_path = "C:/Users/Administrator/Desktop/text"  # 导出的文件夹路径                export_file_name = view.Name + '.csv'                export_full_path = folder_path + "\" + export_file_name  # 完整的导出路径和文件名                model_path = ModelPathUtils.ConvertUserVisiblePathToModelPath(export_full_path)  # 将字符串转换为ModelPath对象                export_options.SetFilePath(model_path)                exporter = IFCExporter.Create(new_doc, export_options)  # 创建IFCExporter对象                # 导出明细表视图为CSV文件                result = exporter.Export(view.Id)                if result == ExporterIFCResults.Success:                    print('成功导出明细表:' + export_full_path)                else:                    print('导出失败:' + result)            new_doc.Close(False)  # 关闭新的项目文件        except Exception as e:            print('导出失败:' + str(e))except Exception as e:    print('打开项目文件失败:' + str(e))
请确保将 `"C:/Users/Administrator/Desktop/text"` 替换为你要导出文件的实际文件夹路径。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 15:47:46 | 显示全部楼层
FishC 发表于 2023-12-25 15:43
是的,我的错误。在Python中,反斜杠`\`被用作转义字符,所以你需要使用两个反斜杠来表示一个反斜杠。以 ...

经过多次排除和测试,基本上不存在路径出问题,是否有别的错误可能
导出失败:expected ModelPath, got str
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-25 15:48:11 | 显示全部楼层
帅昊昊昊 发表于 2023-12-25 15:47
经过多次排除和测试,基本上不存在路径出问题,是否有 ...

非常抱歉给你带来了困扰。看起来问题出在了路径的类型上。IFCExportOptions类中的SetFilePath方法需要接收一个ModelPath类型的参数,而我们直接传递了一个字符串类型的路径。为了解决这个问题,我们可以使用ModelPathUtils类中的静态方法ConvertUserVisiblePathToModelPath来将字符串路径转换为ModelPath对象。以下是修复后的代码示例:import clrclr.AddReference('RevitAPI')from Autodesk.Revit.DB import *from Autodesk.Revit.DB.IFC import *# 定义Revit项目文件路径列表file_paths = # 你需要填入Revit项目文件的路径列表# 打开Revit软件并加载app = __revit__.Applicationdoc = app.NewProjectDocument(UnitSystem.Metric)try:    for file_path in file_paths:        try:            doc.Close(False)  # 关闭当前打开的项目文件            # 打开新的项目文件            open_options = OpenOptions()            new_doc = app.OpenDocumentFile(file_path, open_options)            collector = FilteredElementCollector(new_doc)            views = collector.OfClass(ViewSchedule).ToElements()            for view in views:                export_options = IFCExportOptions()  # 使用IFCExportOptions导出选项                folder_path = "C:/Users/Administrator/Desktop/text"  # 导出的文件夹路径                export_file_name = view.Name + '.csv'                export_full_path = folder_path + "\\" + export_file_name  # 完整的导出路径和文件名                model_path = ModelPathUtils.ConvertUserVisiblePathToModelPath(export_full_path)  # 将字符串转换为ModelPath对象                export_options.SetFilePath(model_path)                exporter = IFCExporter.Create(new_doc, export_options)  # 创建IFCExporter对象                # 导出明细表视图为CSV文件                result = exporter.Export(view.Id)                if result == ExporterIFCResults.Success:                    print('成功导出明细表:' + export_full_path)                else:                    print('导出失败:' + result)            new_doc.Close(False)  # 关闭新的项目文件        except Exception as e:            print('导出失败:' + str(e))except Exception as e:    print('打开项目文件失败:' + str(e))请确保将`"C:/Users/Administrator/Desktop/text"`替换为你要导出文件的实际文件夹路径。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-12-25 15:50:51 | 显示全部楼层
FishC 发表于 2023-12-25 15:48
非常抱歉给你带来了困扰。看起来问题出在了路径的类型上。IFCExportOptions类中的SetFilePath方法需要接 ...

用代码的形式展示吧,这样看起来有点乱
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 22:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表