1

C# で Excel ドキュメントを読み取ることができるライブラリを探していますが、セルの書式設定とスプレッドシートのデータを読み取ることができる必要があります。Excelドキュメントを読み取るためのさまざまな選択肢をリストしたこの便利な質問を見つけましたが、ここで提供される多くのソリューションでは、セルのプロパティ(フォント、背景色など)ではなく、スプレッドシートのコンテンツのみを読み取ることができます. しかし、私の特定の問題については、多くのセルの書式設定を含むドキュメントを読む必要があり、この書式設定情報を読み取ることができる必要があります。

読み取る必要がある Excel ドキュメントはxlsドキュメントであるため、この段階でxlsxを読み取る必要はありません。Excel がインストールされていないサーバーで使用できるライブラリを探しているので、スタンドアロン ソリューションであり、できればオープン ソースである必要があります。

xlsドキュメントからセルの書式設定情報を読み取った経験があり、このタスクの達成に役立つライブラリを提案できる人はいますか?

アップデート:

ClosedXml について読んだところ、必要な機能を提供しているように見えるため、ClosedXml の使用を検討しています。私はこのサンプルコードから作業しています:

http://closedxml.codeplex.com/wikipage?title=Finding%20and%20extracting%20the%20data&referringTitle=ドキュメント

Excel ドキュメントのコンテンツを問題なく読み取ることができました。このコードのカテゴリの例だけを使用しましたが、2 つのカテゴリ名のセルをフォーマットして背景色を設定しました。今、私が ClosedXml でやろうとしていることは次のとおりです。

  • 塗りつぶしの背景色が特定のセルで定義されている場合

  • 定義されている場合は、塗りつぶしの色を取得します(16 進数値で十分です)。

ここに私が使用しようとしたいくつかのコードがあります:

// Get all categories
while (!categoryRow.Cell(coCategoryId).IsEmpty())
{
    IXLCell categoryName = categoryRow.Cell(coCategoryName);
    try
    {
        categories.Add(categoryName.GetString() + " " + categoryName.Style.Fill.BackgroundColor.Color.ToHex());
    }
    catch
    {
        categories.Add(categoryName.GetString() + " None");
    }
    categoryRow = categoryRow.RowBelow();
}

しかし、コード

categoryName.Style.Fill.BackgroundColor.Color.ToHex()

常に「指定されたキーは辞書に存在しませんでした」という期待をスローします。、背景色が定義されているセルの場合でも。これを ClosedXml で動作させる方法を知っている人はいますか?

4

4 に答える 4

5

OpenXmlとそのラッパー -ClosedXml多くの便利な機能を提供します。

于 2012-06-25T12:05:28.800 に答える
0

私は部分的にあなたの要件を避けていますが、サーバー上でxls-> xlsxを変換してから、XMLを検索(XPath)することができます。たぶんxls->openofficecalcでもほぼ同じことができます。

于 2012-06-25T12:10:35.157 に答える
0

Microsoft.Office.Interop.Excelを使用できます

var workbookPath = "";
var worksheetName = "";

var applicationClass = new Application();
var workbook = applicationClass.Workbooks.Open(workbookPath, Type.Missing, Type.Missing,     Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing , Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

var worksheet = workbook.GetWorksheet(worksheetName);
var usedRange = worksheet.UsedRange;
var columnRangeIndexColumn= 1;


            for (int i = beginIndexRow; i <= usedRange.Rows.Count; i++)
            {
                var columnRange = usedRange.Cells[i, columnRangeIndexColumn];
                var value= columnRange.Value2;
             }




use this extension

public static Worksheet GetWorksheet(this Workbook value, string name)
        {
            foreach (Worksheet worksheet in value.Worksheets)
            {
                if (worksheet.Name == name)
                {
                    return worksheet;
                }
            }
            return value.ActiveSheet;
        }
于 2012-06-25T12:10:54.683 に答える
0

無料である必要がない場合は、Aspose.Cellsを強くお勧めします。

于 2012-06-25T12:07:24.250 に答える