0

私がやろうとしていること:

Excel ワークシートのセル値を読み込んでいますが、テキストに上付き文字や下付き文字などの特殊な書式が設定されていることがよくあります。さまざまなラベルなどに文字列を使用して、C# アプリケーションに取り込むときにこの書式を保持したいと考えています。ただし、現在の実装では、すべての上付き文字と下付き文字でその書式設定が失われます。プロセス全体でさまざまなタイプにキャストするという事実に関係していると思います。

        const string fileName = "C:\\Users\\J.Smith\\Desktop\\FeatureInfoPropertyAttributesEXCEL.xlsx";

        // Prepare the required items
        Workbook wb = null;

        // Start Excel
        Application excel = new Application {Visible = false};

        try
        {
            // Open file
            Workbook wb = excel.Workbooks.Open(fileName);

            // Read sheets
            Sheets sheets = wb.Worksheets;

            // Select sheet
            Worksheet ws = (Worksheet) sheets.Item["FeatureInfoPropertyAttributes"];

            string firstCellForPropertiesRange = "A2";
            string secondCellForPropertiesRange = ws.Range[firstCellForPropertiesRange].End[XlDirection.xlDown].Address;
            string firstCellForHeadersRange = firstCellForPropertiesRange.Replace("A", "B");
            string secondCellForHeadersRange = secondCellForPropertiesRange.Replace("A", "B");
            string firstCellForProposedHeadersRange1 = firstCellForHeadersRange.Replace("B", "C");
            string secondCellForProposedHeadersRange1 = secondCellForHeadersRange.Replace("B", "C");
            string firstCellForProposedHeadersRange2 = firstCellForProposedHeadersRange1.Replace("C", "D");
            string secondCellForProposedHeadersRange2 = secondCellForProposedHeadersRange1.Replace("C", "D");

            Range propertiesRange = ws.Range[firstCellForPropertiesRange, secondCellForPropertiesRange];
            Range headersRange = ws.Range[firstCellForHeadersRange, secondCellForHeadersRange];
            Range proposedHeadersRange1 = ws.Range[firstCellForProposedHeadersRange1, secondCellForProposedHeadersRange1];
            Range proposedHeadersRange2 =
                ws.Range[firstCellForProposedHeadersRange2, secondCellForProposedHeadersRange2];

            List<string> properties =
                propertiesRange.Cells.Cast<object>()
                               .Select((t, i) => ((Range) propertiesRange.Cells[i + 1]).Value2 ?? string.Empty)
                               .Cast<string>()
                               .ToList();
            List<string> existingHeaders =
                headersRange.Cells.Cast<object>()
                            .Select((t, i) => ((Range) headersRange.Cells[i + 1]).Value2 ?? string.Empty)
                            .Cast<string>()
                            .ToList();

            List<string> proposedHeaders1 =
                proposedHeadersRange1.Cells.Cast<object>()
                                     .Select(
                                         (t, i) =>
                                         ((Range) proposedHeadersRange1.Cells[i + 1]).Value2 ?? string.Empty)
                                     .Cast<string>()
                                     .ToList();

            List<string> proposedHeaders2 =
                proposedHeadersRange2.Cells.Cast<object>()
                                     .Select(
                                         (t, i) =>
                                         ((Range)proposedHeadersRange2.Cells[i + 1]).Value2 ?? string.Empty)
                                     .Cast<string>()
                                     .ToList();

            foreach (string s in proposedHeaders1.Where(s => !s.Equals(string.Empty)))
            {
                Console.WriteLine(s);
            }

            foreach (string s in proposedHeaders2.Where(s => !s.Equals(string.Empty)))
            {
                Console.WriteLine(s);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            excel.Visible = true;
            wb.Close(false, null, null);
            excel.Quit();
        }

最初の質問:

C# 文字列は、文字列の上付き文字や下付き文字などの書式設定特性をサポートしていますか?

2 番目の質問:

最初の質問に対する答えが「はい」の場合、これを達成するにはどうすればよいですか?

更新: 上付き文字書式を使用したハードコードされた文字列の例

ここに画像の説明を入力

4

1 に答える 1