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

求助:如何用T-SQL在SSMS中解析XLSX解压后的sheet1.xml

T-SQL解析XLSX解压后的sheet1.xml示例

XLSX解压得到的sheet1.xml包含默认命名空间,这是导致你解析返回空数据的核心原因,以下是完整的解析方案:

基础解析(单元格直接存储值)

先声明XML命名空间,再定位到工作表数据行和单元格,提取内容:

-- 声明sheet1.xml的默认命名空间
WITH XMLNAMESPACES (DEFAULT 'http://schemas.openxmlformats.org/spreadsheetml/2006/main')
SELECT
    行号 = Row.value('@r', 'INT'),
    单元格标识 = Cell.value('@r', 'NVARCHAR(10)'), -- 如A1、B2格式
    单元格值 = Cell.value('v[1]', 'NVARCHAR(MAX)')
FROM XMLTable
-- 遍历所有数据行
CROSS APPLY XMLData.nodes('/worksheet/sheetData/row') AS 行集(Row)
-- 遍历当前行的所有单元格
CROSS APPLY Row.nodes('c') AS 单元格集(Cell);

处理共享字符串(单元格标记t="s")

如果单元格属性t="s",说明值存储在sharedStrings.xml中(解压XLSX时会同时生成该文件),需关联解析:

  1. 先导入sharedStrings.xml到数据库:
CREATE TABLE SharedStringsTable (XMLDATA XML);

INSERT INTO SharedStringsTable(XMLData)
SELECT CONVERT(XML,BulkColumn)
FROM OPENROWSET(BULK, 'C:\sharedStrings.xml', SINGLE_BLOB) AS x;
  1. 关联解析共享字符串:
WITH XMLNAMESPACES (DEFAULT 'http://schemas.openxmlformats.org/spreadsheetml/2006/main')
SELECT
    行号 = Row.value('@r', 'INT'),
    单元格标识 = Cell.value('@r', 'NVARCHAR(10)'),
    单元格值 = CASE
        -- 共享字符串类型,从sharedStrings.xml匹配对应索引(注意索引从0开始)
        WHEN Cell.value('@t', 'NVARCHAR(10)') = 's' THEN
            (SELECT 字符串项.value('text()[1]', 'NVARCHAR(MAX)')
             FROM SharedStringsTable
             CROSS APPLY XMLData.nodes('/sst/si[position() = sql:column("共享字符串索引") + 1]') AS 字符串集合(字符串项))
        -- 直接存储的值
        ELSE Cell.value('v[1]', 'NVARCHAR(MAX)')
    END
FROM XMLTable
CROSS APPLY XMLData.nodes('/worksheet/sheetData/row') AS 行集(Row)
CROSS APPLY Row.nodes('c') AS 单元格集(Cell)
-- 提取共享字符串的索引值
CROSS APPLY (SELECT Cell.value('v[1]', 'INT') AS 共享字符串索引) AS 索引集;

注意事项

  • 确保SQL Server服务账号对目标文件路径有读取权限,否则OPENROWSET会报错
  • 若存在合并单元格、公式等特殊结构,需额外处理对应XML节点(如mergeCells、f标签)
  • 若要提取表头,可添加WHERE Row.value('@r', 'INT') = 1过滤第一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:35:26