You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需调用Umbraco扩展API,如何导出全节点已发布站点列表?

无需Umbraco扩展API的已发布站点导出方案

当然有不用调用Umbraco扩展API的办法!下面给你几个实用的方案,都是直接围绕Umbraco的底层数据或者内置功能来实现的:

方案一:直接查询Umbraco数据库并导出

Umbraco的所有内容节点数据都存在数据库里,我们可以直接通过SQL筛选出已发布的站点,再用数据库工具导出成需要的格式:

  1. 编写筛选已发布站点的SQL语句
    假设你的站点对应的文档类型别名为site(请替换成你实际的别名),可以用以下SQL查询已发布的站点信息:

    SELECT 
        n.nodeName AS SiteName,
        n.id AS NodeId,
        c.createDate AS CreatedDate,
        d.updateDate AS LastPublishedDate,
        n.path AS NodePath -- 可选,查看节点层级路径
    FROM 
        umbracoNode n
    JOIN 
        umbracoContent c ON n.id = c.nodeId
    JOIN 
        umbracoDocument d ON n.id = d.nodeId
    JOIN 
        cmsContentType ct ON c.contentTypeId = ct.nodeId
    WHERE 
        d.published = 1 -- 筛选已发布的内容
        AND ct.alias = 'yourSiteDocumentTypeAlias' -- 替换为你的站点文档类型别名
    ORDER BY 
        n.nodeName;
    
  2. 导出查询结果
    用你常用的数据库管理工具(比如SQL Server Management Studio、DBeaver等)执行上述SQL,然后使用工具自带的导出功能,将结果保存为CSV、XLSX或其他格式即可。

方案二:使用Umbraco后台内置报表(适合非开发人员)

如果你的Umbraco版本是v8及以上,后台自带了报表功能,完全可以在界面上操作导出:

  • 登录Umbraco后台,找到左侧菜单的Reports选项
  • 点击Create Report,选择Content作为数据源
  • 在筛选条件中设置:
    • 勾选Published为Yes
    • 指定Document Type为你的站点类型
  • 选择需要导出的字段(比如站点名称、节点ID、发布时间等)
  • 配置完成后,点击页面上的导出按钮,直接选择CSV或Excel格式下载即可

方案三:编写轻量控制台程序实现自动化导出(适合定期导出需求)

如果需要定期自动导出,可以写一个简单的控制台程序,直接连接数据库查询并生成文件,不用依赖Umbraco的API:

以下是C#示例代码(使用EPPlus库生成XLSX文件):

using System.Data.SqlClient;
using OfficeOpenXml;
using System.IO;

namespace UmbracoSiteExporter
{
    class Program
    {
        static void Main(string[] args)
        {
            // 替换为你的Umbraco数据库连接字符串
            string dbConnectionString = "Server=YOUR_SERVER;Database=YOUR_UMBRACO_DB;User Id=YOUR_USER;Password=YOUR_PWD;";
            // 替换为你的站点文档类型别名
            string siteDocTypeAlias = "yourSiteDocumentTypeAlias";
            // 导出文件的保存路径
            string exportPath = @"C:\UmbracoExports\PublishedSites.xlsx";

            // 创建导出目录(如果不存在)
            Directory.CreateDirectory(Path.GetDirectoryName(exportPath));

            string sqlQuery = $@"
                SELECT 
                    n.nodeName AS SiteName,
                    n.id AS NodeId,
                    c.createDate AS CreatedDate,
                    d.updateDate AS LastPublishedDate
                FROM 
                    umbracoNode n
                JOIN 
                    umbracoContent c ON n.id = c.nodeId
                JOIN 
                    umbracoDocument d ON n.id = d.nodeId
                JOIN 
                    cmsContentType ct ON c.contentTypeId = ct.nodeId
                WHERE 
                    d.published = 1
                    AND ct.alias = '{siteDocTypeAlias}'
                ORDER BY 
                    n.nodeName;";

            using (SqlConnection conn = new SqlConnection(dbConnectionString))
            {
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(sqlQuery, conn))
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    // 初始化Excel包
                    using (ExcelPackage excelPackage = new ExcelPackage())
                    {
                        ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.Add("已发布站点列表");

                        // 写入表头
                        worksheet.Cells[1, 1].Value = "站点名称";
                        worksheet.Cells[1, 2].Value = "节点ID";
                        worksheet.Cells[1, 3].Value = "创建时间";
                        worksheet.Cells[1, 4].Value = "最后发布时间";

                        // 格式化表头样式
                        worksheet.Cells[1, 1, 1, 4].Style.Font.Bold = true;

                        // 写入数据行
                        int currentRow = 2;
                        while (reader.Read())
                        {
                            worksheet.Cells[currentRow, 1].Value = reader["SiteName"].ToString();
                            worksheet.Cells[currentRow, 2].Value = reader["NodeId"].ToString();
                            worksheet.Cells[currentRow, 3].Value = reader["CreatedDate"];
                            worksheet.Cells[currentRow, 4].Value = reader["LastPublishedDate"];
                            currentRow++;
                        }

                        // 自动调整列宽
                        worksheet.Cells.AutoFitColumns();

                        // 保存文件
                        FileInfo excelFile = new FileInfo(exportPath);
                        excelPackage.SaveAs(excelFile);
                    }
                }
            }
        }
    }
}

注意:需要先通过NuGet安装EPPlus包,并且确保程序有数据库访问权限和文件写入权限。

内容的提问来源于stack exchange,提问作者user3336627

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:38:21