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

ClosedXML插入数据与提取数据不匹配及工作簿损坏问题求助

ClosedXML写入Excel时非数值数据不匹配且工作簿损坏问题

我用ClosedXML替代OLEDB做Excel操作,代码实现简单,但从DataTable写入工作表后多数非数值数据不正确,还出现工作簿损坏提示(位置:第82行第19列)。

简化代码

using (XLWorkbook wkb = new XLWorkbook(exportFile.FullName))
{
    var dataTable = GetSqlDbData("usp_GetMyData");
    IXLWorksheet wks = wkb.Worksheet("ExtractData");       
    wks.Cell(2, 1).InsertData(dataTable.AsEnumerable());                    
    wks.Columns().AdjustToContents();
}

存储过程返回数据示例

存储过程返回21列445行数据,包含数值、文本等类型,其中空值对应数据库NULL,示例行数据如下:

Row 1: Column=OfficeName, Type=String, Value=UK - London    
Row 1: Column=AssociateName, Type=String, Value=Smith, Mr    
Row 1: Column=CompanyID, Type=Int32, Value=682    
Row 1: Column=CompanyName, Type=String, Value=My Pension Plan    
Row 1: Column=SchemeID, Type=Int32, Value=820    
Row 1: Column=SchemeName, Type=String, Value=My UK Pension Plan    
Row 1: Column=AccountingDate, Type=String, Value=    
Row 1: Column=AF_Frequency, Type=String, Value=    
Row 1: Column=ValuationDate, Type=DateTime, Value=31/12/2018 00:00:00    
Row 1: Column=VF_Frequency, Type=String, Value=Triennial    
Row 1: Column=TrusteeClientCode, Type=String, Value=618676    
Row 1: Column=TrusteeEngagementCode, Type=String, Value=3302073    
Row 1: Column=CorporateClientCode, Type=String, Value=    
Row 1: Column=CorporateEngagementCode, Type=String, Value=    
Row 1: Column=AccountingCode, Type=String, Value=None    
Row 1: Column=PPFIssue, Type=Boolean, Value=True    
Row 1: Column=PPFASK, Type=String, Value=Trustee    
Row 1: Column=TeamID, Type=Int32, Value=1176    
Row 1: Column=TrusteeAdviceGiven, Type=String, Value=Lots of advice    
Row 1: Column=CompanyAdviceGiven, Type=String, Value=Do not advise    
Row 1: Column=TranscalcUsage, Type=String, Value=None    

损坏工作表的XML内容

损坏文件中第2行的XML内容如下:

<x:row r="2" spans="1:21">
    <x:c r="A2" s="0" t="s">
        <x:v>21</x:v>
    </x:c>
    <x:c r="B2" s="0" t="s">
        <x:v>22</x:v>
    </x:c>
    <x:c r="C2" s="1">
        <x:v>682</x:v>
    </x:c>
    <x:c r="D2" s="0" t="s">
        <x:v>23</x:v>
    </x:c>
    <x:c r="E2" s="1">
        <x:v>820</x:v>
    </x:c>
    <x:c r="F2" s="0" t="s">
        <x:v>24</x:v>
    </x:c>
    <x:c r="I2" s="12">
        <x:v>43465</x:v>
    </x:c>
    <x:c r="J2" s="0" t="s">
        <x:v>25</x:v>
    </x:c>
    <x:c r="K2" s="0" t="s">
        <x:v>26</x:v>
    </x:c>
    <x:c r="L2" s="0" t="s">
        <x:v>27</x:v>
    </x:c>
    <x:c r="O2" s="0" t="s">
        <x:v>28</x:v>
    </x:c>
    <x:c r="P2" s="0" t="b">
        <x:v>1</x:v>
    </x:c>
    <x:c r="Q2" s="0" t="s">
        <x:v>29</x:v>
    </x:c>
    <x:c r="R2" s="0">
        <x:v>1176</x:v>
    </x:c>
    <x:c r="S2" s="0" t="s">
        <x:v>30</x:v>
    </x:c>
    <x:c r="T2" s="0" t="s">
        <x:v>31</x:v>
    </x:c>
    <x:c r="U2" s="0" t="s">
        <x:v>28</x:v>
    </x:c>
</x:row>

目前数值型数据(如C、E、R列)及日期型数据(I列)写入正确,但其他字段数据与原数据不符(例如第82行A83单元格值为42,B83为401)。请问为何存储过程返回的非数值数据写入工作簿后不匹配?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:05:01