C# EPPlus问题公式1C1已生成损坏的Excel

C# EPPlus问题公式1C1已生成损坏的Excel,c#,epplus,C#,Epplus,我正在生成一个excel表格,其中包含一组数据,其中包括必须应用于列的公式 例: 当我引用列R(id=18)时,这些公式工作正常,excel正确生成,没有任何错误,但当其更改为列id=399时,会损坏excel 这是我的xml代码和数据。此处ColumnId说明了哪列,FieldCode说明了列主题,FieldCalculation说明了该列的公式 <Header> <RowId>1</RowId> <HeaderCells>

我正在生成一个excel表格,其中包含一组数据,其中包括必须应用于列的公式

例:

当我引用列R(id=18)时,这些公式工作正常,excel正确生成,没有任何错误,但当其更改为列id=399时,会损坏excel

这是我的xml代码和数据。此处
ColumnId
说明了哪列,
FieldCode
说明了列主题,
FieldCalculation
说明了该列的公式

  <Header>
    <RowId>1</RowId>
    <HeaderCells>
      <HeaderCell>
        <ColumnId>2</ColumnId>
        <FieldCode>ST1001</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>1</ColumnId>
        <FieldCode>ST1000</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>3</ColumnId>
        <FieldCode>ST1002</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>4</ColumnId>
        <FieldCode>ST1003</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>5</ColumnId>
        <FieldCode>ST1004</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>6</ColumnId>
        <FieldCode>ST1005</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>7</ColumnId>
        <FieldCode>ST1006</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>8</ColumnId>
        <FieldCode>ST1007</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>9</ColumnId>
        <FieldCode>ST1008</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>10</ColumnId>
        <FieldCode>ST1009</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>11</ColumnId>
        <FieldCode>ST1010</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>12</ColumnId>
        <FieldCode>ST1011</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>13</ColumnId>
        <FieldCode>ST1012</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>14</ColumnId>
        <FieldCode>ST1013</FieldCode>
        <FieldCalculation>UPPER(TRIM(CONCATENATE('ST1004', 'ST1005', 'ST1006', 'ST1007, 'ST1008', 'ST1009', 'ST1010', 'ST1011', 'ST1012')))</FieldCalculation>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>15</ColumnId>
        <FieldCode>ST1030</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>400</ColumnId>
        <FieldCode>ST1041</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>401</ColumnId>
        <FieldCode>ST1043</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>399</ColumnId>
        <FieldCode>ST1045</FieldCode>
        <FieldCalculation>(ST1043-ST1041)/ST1041</FieldCalculation>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>19</ColumnId>
        <FieldCode>ST1073</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>20</ColumnId>
        <FieldCode>ST1074</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>21</ColumnId>
        <FieldCode>ST1075</FieldCode>
      </HeaderCell>
      <HeaderCell>
        <ColumnId>22</ColumnId>
        <FieldCode>ST1076</FieldCode>
        <FieldCalculation>ST1073+ST1074+ST1075</FieldCalculation>
      </HeaderCell>
    </HeaderCells>
  </Header>
然后,该字段公式应用于整个列,如下所示

这里,
i
是当前列id,
headerCells
对象包含反序列化的xml数据

    fieldCalculation = if (!string.IsNullOrWhiteSpace(fieldCalculation))
    {
        string formulaString = null;
        formulaString = GetFieldFormula(fieldCalculation, headerCells, i); 
        sheet.Cells[2, i, rowcount - 2, i].FormulaR1C1 = formulaString;                    
    }

In this example when I change ST1045 (id =399) column's id to 18, the excel is not corrupted. If I apply only one formula at a time out of these three formula, then also the excel is not corrupted. I cant find what is the exact reason for this issue. I have used the latest version of EPPlus 4.5.3.1. Please give your suggestions.  

我可以通过更改excel版本或限制应用公式的行数来解决此问题

ASFAIU此问题是由于打开从EPPlus库创建的excel文件时消耗的内存造成的

我最初使用的是excel 2007,当我改为excel 2016时,文件没有损坏


由于我正在构建的应用程序应该支持excel 2010,因此我对应用公式的行数进行了限制。如果不是,则公式将应用于列中的所有行。那么问题也解决了

我可以通过更改excel版本或限制应用公式的行数来解决此问题

ASFAIU此问题是由于打开从EPPlus库创建的excel文件时消耗的内存造成的

我最初使用的是excel 2007,当我改为excel 2016时,文件没有损坏

由于我正在构建的应用程序应该支持excel 2010,因此我对应用公式的行数进行了限制。如果不是,则公式将应用于列中的所有行。那么问题也解决了

我用这个:

ws.Cells[row,column+1].Formula = Regex.Replace(ws.Cells[row,column].Formula, @"[A-Z]+(?=\d)+", ExcelCellAddress.GetColumnLetter(column+1));
通过正则表达式更改列的字母,这将验证在公式
[a-Z]+(?=\d)+中搜索单元格的字母和数字

我使用这个:

ws.Cells[row,column+1].Formula = Regex.Replace(ws.Cells[row,column].Formula, @"[A-Z]+(?=\d)+", ExcelCellAddress.GetColumnLetter(column+1));
通过正则表达式更改列的字母,这将验证在公式
[a-Z]+(?=\d)+中搜索单元格的字母和数字

ws.Cells[row,column+1].Formula = Regex.Replace(ws.Cells[row,column].Formula, @"[A-Z]+(?=\d)+", ExcelCellAddress.GetColumnLetter(column+1));