如何将网页预格式化文本导入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
相关产品推荐
相关产品推荐

