0

filename 、 sheetname 、および cell address を渡すと、Excel シートのセル値を返すメソッドを作成します。

public static string GetCellValue(string fileName, string sheetName, string addressName)
        {
            string value = null;


            using (SpreadsheetDocument document = SpreadsheetDocument.Open(fileName, false))
            {

                WorkbookPart wbPart = document.WorkbookPart;


                  Where(s => s.Name == sheetName).FirstOrDefault();


                if (theSheet == null)
                {
                    throw new ArgumentException("sheetName");
                }


                WorksheetPart wsPart =
                    (WorksheetPart)(wbPart.GetPartById(theSheet.Id));


                Cell theCell = wsPart.Worksheet.Descendants<Cell>().
                  Where(c => c.CellReference == addressName).FirstOrDefault();


                if (theCell != null)
                {
                    value = theCell.InnerText;


                    if (theCell.DataType != null)
                    {
                        switch (theCell.DataType.Value)
                        {
                            case CellValues.SharedString:
.
                                var stringTable =
                                    wbPart.GetPartsOfType<SharedStringTablePart>()
                                    .FirstOrDefault();

                                if (stringTable != null)
                                {
                                    value =
                                        stringTable.SharedStringTable
                                        .ElementAt(int.Parse(value)).InnerText;
                                }
                                break;

                            case CellValues.Boolean:
                                switch (value)
                                {
                                    case "0":
                                        value = "FALSE";
                                        break;
                                    default:
                                        value = "TRUE";
                                        break;
                                }
                                break;
                        }
                    }
                }
            }
            return value;
        }

上記のメソッドを呼び出す方法は次のとおりです。

 private void button1_Click(object sender, EventArgs e)
        {
            const string fileName = @"C:\Users\dkumarage\Desktop\Book1.xlsx";
            string value = GetCellValue(fileName, "Sheet1", "A1");
            textBox1.Text = value;
        }

この方法では、1 つのセル値しか取得できません。このメソッドを再帰的に呼び出して、すべてのセル値を取得するにはどうすればよいですか。私を助けてください。(ここでは範囲を渡すことができません。範囲がわからないためです。代わりに、while(行の終わりではありません)を使用する必要があります)

ありがとうございました

4

1 に答える 1

1

なぜ再帰的にしたいのかわかりません。とにかく、これがあなたがやりたいことの非再帰的なバージョンです。これはExcelの相互運用機能を使用しており、例外(ファイルが見つからない、ワークシートが存在しないなど)を管理する必要はありませんでしたが、出発点になるはずです。

public static List<string> GetCellValue(string fileName, string sheetName, string addressName)
    {
        List<string> result = new List<String>;
        object hmissing = System.Reflection.Missing.Value;
        Application app = new ApplicationClass();
        Workbook aWb = app.Workbooks.Open(fileName, hmissing, hmissing, hmissing, hmissing,
            hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing, hmissing,
            hmissing);
        Worksheet aWs = aWb.Worksheets[sheetName] as Worksheet;
        object[,] values = aWs.UsedRange.get_Value(hmissing) as object[,];
        foreach (object anObj in values)
             if (anObj != null)
                 result.Add(anObj.ToString());  
        aWb.Close(false, hmissing, hmissing);
        app.Quit();          
        return result;
    }
于 2012-06-12T09:47:50.773 に答える