Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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# 使用c从excel工作表中获取基于行中上一个单元格值的其他单元格值#_C#_.net_Excel_.net Core_Openxml - Fatal编程技术网

C# 使用c从excel工作表中获取基于行中上一个单元格值的其他单元格值#

C# 使用c从excel工作表中获取基于行中上一个单元格值的其他单元格值#,c#,.net,excel,.net-core,openxml,C#,.net,Excel,.net Core,Openxml,我正在尝试使用OpenXMLSDK从excel工作表中读取数据,我在excel工作表中有列结构,如下图所示 当国家为美国时,我需要获取单元格站和WMO#的值,并且我在excel表中确实有国家美国的数据,但无法确定如何获取数据 我使用下面的代码来获取数据 string filePath = @"C:\data.xlsx"; using FileStream fs = new FileStream(filePath, FileMode.Open,

我正在尝试使用OpenXMLSDK从excel工作表中读取数据,我在excel工作表中有列结构,如下图所示

国家
美国
时,我需要获取单元格
WMO#
的值,并且我在excel表中确实有国家美国的数据,但无法确定如何获取数据

我使用下面的代码来获取数据

        string filePath = @"C:\data.xlsx";
        using FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
        using SpreadsheetDocument doc = SpreadsheetDocument.Open(fs, false);
        WorkbookPart workbookPart = doc.WorkbookPart;
        SharedStringTablePart sstpart = workbookPart.GetPartsOfType<SharedStringTablePart>().First();
        SharedStringTable sst = sstpart.SharedStringTable;

        Sheet firstSheet = workbookPart.Workbook.Descendants<Sheet>().First();
        Worksheet sheet = ((WorksheetPart)workbookPart.GetPartById(firstSheet.Id)).Worksheet;

        var cells = sheet.Descendants<Cell>();
        var rows = sheet.Descendants<Row>();

        foreach (Row row in rows.Skip(5))
        {
            int cellCount = 0;
            foreach (Cell c in row.Elements<Cell>())
            {
                string stringValue = "";
                if ((c.DataType != null) && (c.DataType == CellValues.SharedString))
                {
                    int ssid = int.Parse(c.CellValue.Text);
                    stringValue = sst.ChildElements[ssid].InnerText;
                }
                else if (c.CellValue != null)
                {
                    stringValue = c.CellValue.Text;
                }
                cellCount++;
                Console.WriteLine("Cell Number:"+ cellCount + "CellValue:" + stringValue);
            }
        }
stringfilepath=@“C:\data.xlsx”;
使用FileStream fs=newfilestream(filePath,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
使用SpreadsheetDocument doc=SpreadsheetDocument.Open(fs,false);
WorkbookPart WorkbookPart=doc.WorkbookPart;
SharedStringTablePart sstpart=workbookPart.GetPartSoftType().First();
SharedStringTable sst=sstpart.SharedStringTable;
Sheet firstSheet=workbookPart.Workbook.subjects().First();
工作表工作表=((WorksheetPart)workbookPart.GetPartById(firstSheet.Id)).Worksheet;
var cells=sheet.subjections();
var rows=sheet.subjections();
foreach(一行一行跳过(5))
{
int-cellCount=0;
foreach(行.Elements()中的单元格c)
{
字符串stringValue=“”;
if((c.DataType!=null)&&(c.DataType==CellValues.SharedString))
{
int ssid=int.Parse(c.CellValue.Text);
stringValue=sst.ChildElements[ssid].InnerText;
}
else if(c.CellValue!=null)
{
stringValue=c.CellValue.Text;
}
cellCount++;
Console.WriteLine(“单元号:+cellCount+”单元值:+stringValue”);
}
}
如果国家是
USA
,我只需要获取一行中剩余的单元格数据,我将使用openxml库来实现这一点

有人能告诉我如何才能做到这一点吗


提前谢谢。

有人能告诉我目前的方法还有什么其他方法或建议吗?我自己也在学习C#,但在我看来,如果这个基本循环有效的话,你就接近了。您只需要将usa的逻辑检查添加为cellvalue,然后将剩余的单元格存储在某种结构中。