Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中使用OpenXMLSDK创建xlsx文件_C#_Excel - Fatal编程技术网

在c#中使用OpenXMLSDK创建xlsx文件

在c#中使用OpenXMLSDK创建xlsx文件,c#,excel,C#,Excel,我在使用OpenXMLSDK创建excel文件时遇到了一点问题,我按照上的说明进行了操作 类程序 { 静态void Main(字符串[]参数) { 名单人员=新名单() { 新人(){FirstName=“Brecht”,LastName=“Baekelandt”,年龄=29}, 新人(){FirstName=“Pieter”,LastName=“Baekelandt”,年龄=28}, 新人(){FirstName=“Leonie”,LastName=“Baekelandt”,年龄=21} };

我在使用OpenXMLSDK创建excel文件时遇到了一点问题,我按照上的说明进行了操作

类程序
{
静态void Main(字符串[]参数)
{
名单人员=新名单()
{
新人(){FirstName=“Brecht”,LastName=“Baekelandt”,年龄=29},
新人(){FirstName=“Pieter”,LastName=“Baekelandt”,年龄=28},
新人(){FirstName=“Leonie”,LastName=“Baekelandt”,年龄=21}
};
string directory=Path.Combine(@“C:\Temp”,“TestFiles”);
string fileName=Path.Combine(目录,string.Format(“TestFile{0:yyyy-MM-dd-HH.MM.ss}.xlsx”,DateTime.Now));
//通过提供文件路径创建电子表格文档。
//默认情况下,AutoSave=true、Editable=true和Type=xlsx。
使用(电子表格文档电子表格文档=电子表格文档)。
创建(文件名,电子表格文档类型.工作簿))
{
//将工作簿部件添加到文档中。
WorkbookPart WorkbookPart=电子表格文档.AddWorkbookPart();
workbookpart.工作簿=新工作簿();
//将工作表部件添加到工作簿部件。
WorksheetPart WorksheetPart=workbookpart.AddNewPart();
worksheetPart.Worksheet=新工作表(new SheetData());
//将工作表添加到工作簿中。
工作表=电子表格Document.WorkbookPart.Workbook。
追加子项(新页());
//附加新工作表并将其与工作簿关联。
图纸=新图纸()
{
Id=spreadsheetDocument.WorkbookPart。
GetIdOfPart(工作表部分),
SheetId=1,
Name=“mySheet”
};
附页(页);
SheetData SheetData=worksheetPart.Worksheet.GetFirstChild();
UInt32行索引=0;
foreach(var个人对个人)
{
var row=new row(){RowIndex=RowIndex};
var firstNameCell=newcell(){CellReference=“A”+(rowIndex+1)};
firstNameCell.CellValue=新的CellValue(person.FirstName);
firstNameCell.DataType=CellValues.String;
行.AppendChild(firstNameCell);
Cell lastNameCell=newcell(){CellReference=“B”+(rowIndex+1)};
lastNameCell.CellValue=新的CellValue(person.LastName);
lastNameCell.DataType=新的枚举值(CellValues.String);
行.AppendChild(lastNameCell);
Cell ageCell=new Cell(){CellReference=“C”+(rowIndex+1)};
ageCell.CellValue=新的CellValue(person.Age.ToString());
ageCell.DataType=新的枚举值(CellValues.Number);
行。追加子项(ageCell);
sheetData.AppendChild(行);
rowIndex++;
}
workbookpart.Workbook.Save();
}
}
}
这将创建以下xml文件:

<?xml version="1.0" encoding="utf-8"?>
<x:worksheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<x:sheetData>
    <x:row r="0">
        <x:c r="A1" t="str">
            <x:v>Brecht</x:v>
        </x:c>
        <x:c r="B1" t="str">
            <x:v>Baekelandt</x:v>
        </x:c>
        <x:c r="C1" t="n">
            <x:v>29</x:v>
        </x:c>
    </x:row>
    <x:row r="1">
        <x:c r="A2" t="str">
            <x:v>Pieter</x:v>
        </x:c>
        <x:c r="B2" t="str">
            <x:v>Baekelandt</x:v>
        </x:c>
        <x:c r="C2" t="n">
            <x:v>28</x:v>
        </x:c>
    </x:row>
    <x:row r="2">
        <x:c r="A3" t="str">
            <x:v>Leonie</x:v>
        </x:c>
        <x:c r="B3" t="str">
            <x:v>Baekelandt</x:v>
        </x:c>
        <x:c r="C3" t="n">
            <x:v>21</x:v>
        </x:c>
    </x:row>
</x:sheetData>
</x:worksheet>

布莱希特
巴克兰特
29
彼得
巴克兰特
28
莱昂尼
巴克兰特
21
这应该可以,但是当我打开xlsx文件时,我得到以下错误:

Excel在[文件]中发现无法读取的内容。是否要恢复此工作簿的内容

单击“是”时,只有第一个人被添加到工作表中


我做错了什么?

你的问题是索引。行索引从索引1开始

流动应该有效

      UInt32 rowIndex = 1;

      foreach (var person in persons)
      {
          var row = new Row() { RowIndex = rowIndex };

          var firstNameCell = new Cell() { CellReference = "A" +rowIndex };
          firstNameCell.CellValue = new CellValue(person.FirstName);
          firstNameCell.DataType = CellValues.String;

          row.Append(firstNameCell);

          Cell lastNameCell = new Cell() { CellReference = "B"+rowIndex };
          lastNameCell.CellValue = new CellValue(person.LastName);
          lastNameCell.DataType = new EnumValue<CellValues>(CellValues.String);

          row.Append(lastNameCell);


          Cell ageCell = new Cell() { CellReference = "C"+rowIndex };

          ageCell.CellValue = new CellValue(person.Age.ToString());
          ageCell.DataType = new EnumValue<CellValues>(CellValues.Number);

          row.Append(ageCell);

          sheetData.Append(row);

            rowIndex++;
        }
UInt32行索引=1;
foreach(var个人对个人)
{
var row=new row(){RowIndex=RowIndex};
var firstNameCell=new Cell(){CellReference=“A”+rowIndex};
firstNameCell.CellValue=新的CellValue(person.FirstName);
firstNameCell.DataType=CellValues.String;
追加行(firstNameCell);
Cell lastNameCell=new Cell(){CellReference=“B”+rowIndex};
lastNameCell.CellValue=新的CellValue(person.LastName);
lastNameCell.DataType=新的枚举值(CellValues.String);
追加(lastNameCell);
Cell ageCell=new Cell(){CellReference=“C”+rowIndex};
ageCell.CellValue=新的CellValue(person.Age.ToString());
ageCell.DataType=新的枚举值(CellValues.Number);
行。追加(ageCell);
sheetData.Append(行);
rowIndex++;
}

这只是一个测试用例,将有更多的对象需要转换为excel。另外,你在这里做的是在第一行,第一列,第二行,第二列等等上设置名字。这不起作用,我只在第一行上得到名字,就像我之前说过的。我需要循环一个完整的人员列表,但循环不起作用。就像每当我想在第二行、第三行写东西时,它就不起作用了……我编辑了我的答案,我检查了你的代码,但它不起作用,对不起。。。另外,单元格A1上的索引是行索引,而不是列索引,请先阅读我提供的链接…我给出了答案。对不起,我的工作有点忙,所以我把前面的答案弄错了。问题在于行索引这是答案,我不知道会这么简单:-)谢谢!!
      UInt32 rowIndex = 1;

      foreach (var person in persons)
      {
          var row = new Row() { RowIndex = rowIndex };

          var firstNameCell = new Cell() { CellReference = "A" +rowIndex };
          firstNameCell.CellValue = new CellValue(person.FirstName);
          firstNameCell.DataType = CellValues.String;

          row.Append(firstNameCell);

          Cell lastNameCell = new Cell() { CellReference = "B"+rowIndex };
          lastNameCell.CellValue = new CellValue(person.LastName);
          lastNameCell.DataType = new EnumValue<CellValues>(CellValues.String);

          row.Append(lastNameCell);


          Cell ageCell = new Cell() { CellReference = "C"+rowIndex };

          ageCell.CellValue = new CellValue(person.Age.ToString());
          ageCell.DataType = new EnumValue<CellValues>(CellValues.Number);

          row.Append(ageCell);

          sheetData.Append(row);

            rowIndex++;
        }