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

如何将网页预格式化文本导入Excel并保留原有格式?

问题描述

我们机构使用美国国家气象局(NWS)的火险天气预报产品,为消防管理人员生成特定区域的火险天气报告,此前在Google Sheets完成这项工作,现在需要迁移到Excel。

当前报告包含:

  • RAWS(偏远地区气象站)数据
  • NWS火险天气预报文本摘录
  • 天气警报

报告每日导出PDF发送两次,也可在机构网站按需查看。NWS的火险天气预报是PHP生成的预格式化网页文本。

目前使用Power Query导入数据,代码如下:

let
    Source = Web.Page(Web.Contents("https://forecast.weather.gov/product.php?site=NWS&issuedby=LWX&product=FWF&format=txt&version=1&glossary=0")),
    Data = Source{0}[Data],
    Children = Data{0}[Children],
    Children1 = Children{1}[Children],
    Children2 = Children1{12}[Children],
    Children3 = Children2{7}[Children],
    #"Replaced Value" = Table.ReplaceValue(Children3,"PAZ064","$$",Replacer.ReplaceText,{"Text"}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Replaced Value", "Text", Splitter.SplitTextByDelimiter("$$", QuoteStyle.None), {"Text.1", "Text.2", "Text.3", "Text.4", "Text.5", "Text.6", "Text.7", "Text.8", "Text.9", "Text.10", "Text.11", "Text.12", "Text.13", "Text.14", "Text.15", "Text.16", "Text.17", "Text.18", "Text.19", "Text.20", "Text.21", "Text.22", "Text.23", "Text.24", "Text.25", "Text.26", "Text.27", "Text.28", "Text.29", "Text.30", "Text.31", "Text.32", "Text.33", "Text.34", "Text.35", "Text.36", "Text.37", "Text.38", "Text.39", "Text.40", "Text.41", "Text.42", "Text.43", "Text.44", "Text.45", "Text.46", "Text.47", "Text.48", "Text.49", "Text.50", "Text.51", "Text.52", "Text.53", "Text.54", "Text.55", "Text.56", "Text.57", "Text.58", "Text.59", "Text.60", "Text.61", "Text.62", "Text.63", "Text.64", "Text.65", "Text.66", "Text.67", "Text.68", "Text.69", "Text.70", "Text.71", "Text.72", "Text.73", "Text.74", "Text.75", "Text.76", "Text.77", "Text.78", "Text.79", "Text.80", "Text.81", "Text.82", "Text.83", "Text.84", "Text.85", "Text.86", "Text.87", "Text.88", "Text.89", "Text.90", "Text.91", "Text.92", "Text.93", "Text.94", "Text.95", "Text.96", "Text.97", "Text.98", "Text.99", "Text.100"}),
    #"Transposed Table" = Table.Transpose(#"Split Column by Delimiter"),
    #"Removed Blank Rows" = Table.SelectRows(#"Transposed Table", each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
    #"Transposed Table1" = Table.Transpose(#"Removed Blank Rows"),
    #"Removed Columns" = Table.SelectColumns(#"Transposed Table1",{"Column2", "Column12", "Column19", "Column37"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column2", "Discussion"}, {"Column12", "C & SE Montgomery, MD"}, {"Column19", "NW Prince Willam, VA"}, {"Column37", "W Mineral"}})
in
    #"Renamed Columns"

数据可成功导入,但源文本的换行符丢失,比如网页中的预格式化文本:

755
FNUS51 KLWX 191438
FWFLWX

Fire Weather Planning Forecast for W and CTL MD...E WV...N VA and DC
National Weather Service Baltimore MD/Washington DC
937 AM EST Thu Dec 19 2024

导入后变为:

755FNUS51 KLWX 191438FWFLWXFire Weather Planning Forecast for W and CTL MD...E WV...N VA and DCNational Weather Service Baltimore MD/Washington DC937 AM EST Thu Dec 19 2024

限制条件

  • 需嵌入网页,无法使用宏,暂不确定网页界面能否刷新连接;
  • 对PHP及PHP与WordPress的交互了解不足,无法开发合适插件;
  • 机构组织架构复杂,无法直接共享工作簿。

需要解决的问题:实现网页预格式化文本导入Excel后保留原有格式(主要是换行符)。

解决方案

方法1:修改Power Query代码,保留换行符

问题核心是Web.Page解析HTML时会忽略预格式化文本的换行,改用直接读取纯文本内容的方式处理:

let
    // 直接获取网页二进制内容并转换为纯文本,保留原始换行
    Source = Text.FromBinary(Web.Contents("https://forecast.weather.gov/product.php?site=NWS&issuedby=LWX&product=FWF&format=txt&version=1&glossary=0")),
    // 统一换行符格式,同时替换PAZ064标记
    CleanedText = Text.Replace(Text.Replace(Source, "#(cr)", "#(lf)"), "PAZ064", "$$"),
    // 按$$标记拆分文本
    SplitText = Text.Split(CleanedText, "$$"),
    // 转换为表格
    ToTable = Table.FromList(SplitText, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    // 转置匹配原有结构
    Transposed = Table.Transpose(ToTable),
    // 移除空行
    RemovedBlankRows = Table.SelectRows(Transposed, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
    // 再次转置
    TransposedAgain = Table.Transpose(RemovedBlankRows),
    // 选择目标列并重命名
    SelectedColumns = Table.SelectColumns(TransposedAgain,{"Column2", "Column12", "Column19", "Column37"}),
    RenamedColumns = Table.RenameColumns(SelectedColumns,{{"Column2", "Discussion"}, {"Column12", "C & SE Montgomery, MD"}, {"Column19", "NW Prince Willam, VA"}, {"Column37", "W Mineral"}})
in
    RenamedColumns

这段代码跳过HTML解析步骤,直接读取原始文本,保留换行符,再完成后续拆分和整理操作,导入后的文本会和源格式一致。

方法2:单元格格式辅助设置

如果导入后部分换行未显示,选中目标单元格,开启对齐方式中的「自动换行」功能,确保单元格能识别并显示换行符。

网页嵌入后的刷新处理

若要将工作簿嵌入网页,可使用Excel的「发布到Web」功能,选择「自动刷新」选项(需将工作簿存储在支持自动刷新的位置,如OneDrive),这样网页嵌入的版本会定期更新数据。


内容的提问来源于stack exchange,提问作者Giric Red Wolf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:48:10