作成日: 2016/04/22 最終更新日: 2017/01/17
文書種別
不具合
状況
修正済み
詳細
改行を含むRTFテキストを設定したExcelファイルを、C1XLBookのLoadメソッドを用いてロードし、RichTextBoxのRtfプロパティにRTF形式で取得したとき、RTFの改行コードが(¥par)正しく設定されません。
そのため、RichTextBoxのテキスト(Textプロパティ)をLabelコントロールなどに表示すると、テキストの改行が行われません。
※Excelでは、テキストが書式化された場合、内部的にはタグによる書式付きテキストとして格納されます。C1XLBookを用いて.xlsxファイルを読み込んだ際に、この書式付きテキストがRTF形式に変換されます。
そのため、RichTextBoxのテキスト(Textプロパティ)をLabelコントロールなどに表示すると、テキストの改行が行われません。
※Excelでは、テキストが書式化された場合、内部的にはタグによる書式付きテキストとして格納されます。C1XLBookを用いて.xlsxファイルを読み込んだ際に、この書式付きテキストがRTF形式に変換されます。
回避方法
この問題はバージョン2.0.20161.147または4.0.20161.147で修正されました。
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです。
取得したRTFで、Excel内の元のセル内の改行位置に存在するvbLfコードを、RTF形式における段落区切り(¥par)に置き換えます。
◎サンプルコード(VB)
◎サンプルコード(C#)
修正版の適用方法については、アップデートの方法を参照してください。
修正版を適用しない場合の回避方法は次の通りです。
取得したRTFで、Excel内の元のセル内の改行位置に存在するvbLfコードを、RTF形式における段落区切り(¥par)に置き換えます。
◎サンプルコード(VB)
' **** Excelの1行1列目のセルに、改行コードを含むRTFが設定されている場合 ****
Dim rows As New List(Of String)
Dim RichTextBox1 As New RichTextBox()
For stNo As Integer = 0 To C1XLBook1.Sheets.Count - 1
Dim sheet = C1XLBook1.Sheets(stNo)
'Sheetが存在しなければ、処理を中止
If sheet Is Nothing Then Exit For
'A列の値を取得
For row As Integer = 0 To sheet.Rows.Count - 1
'返却用文字列
Dim cellText As String
Try
' リッチテキストの場合、改行コード(vbLf)を「¥par」に置き換え
Dim value As String = CStr(sheet(row, 0).Value)
If Not value Is Nothing AndAlso value.StartsWith("{¥rtf1") Then
value = value.Replace(vbLf, "¥par")
End If
RichTextBox1.Rtf = value
Dim plaintext = RichTextBox1.Text
cellText = plaintext.Replace(vbLf, vbCrLf)
Catch ex As Exception
cellText = sheet(row, 0).Text
End Try
rows.Add(cellText)
Next
Next
Dim rows As New List(Of String)
Dim RichTextBox1 As New RichTextBox()
For stNo As Integer = 0 To C1XLBook1.Sheets.Count - 1
Dim sheet = C1XLBook1.Sheets(stNo)
'Sheetが存在しなければ、処理を中止
If sheet Is Nothing Then Exit For
'A列の値を取得
For row As Integer = 0 To sheet.Rows.Count - 1
'返却用文字列
Dim cellText As String
Try
' リッチテキストの場合、改行コード(vbLf)を「¥par」に置き換え
Dim value As String = CStr(sheet(row, 0).Value)
If Not value Is Nothing AndAlso value.StartsWith("{¥rtf1") Then
value = value.Replace(vbLf, "¥par")
End If
RichTextBox1.Rtf = value
Dim plaintext = RichTextBox1.Text
cellText = plaintext.Replace(vbLf, vbCrLf)
Catch ex As Exception
cellText = sheet(row, 0).Text
End Try
rows.Add(cellText)
Next
Next
◎サンプルコード(C#)
// **** Excelの1行1列目のセルに、改行コードを含むRTFが設定されている場合 ****
C1XLBook1.Load(filePath, FileFormat.OpenXml);
List rows = new List();
RichTextBox RichTextBox1 = new RichTextBox();
for (int stNo = 0; stNo <= C1XLBook1.Sheets.Count - 1; stNo++)
{
dynamic sheet = C1XLBook1.Sheets(stNo);
//Sheetが存在しなければ、処理を中止
if (sheet == null)
break; // TODO: might not be correct. Was : Exit For
//A列の値を取得
for (int row = 0; row <= sheet.Rows.Count - 1; row++)
{
//返却用文字列
string cellText = null;
try
{
// リッチテキストの場合、改行コード(vbLf)を「¥par」に置き換え
string value = Convert.ToString(sheet(row, 0).Value);
if ((value != null) && value.StartsWith("{¥¥rtf1"))
{
value = value.Replace(Constants.vbLf, "¥¥par");
}
RichTextBox1.Rtf = value;
dynamic plaintext = RichTextBox1.Text;
cellText = plaintext.Replace(Constants.vbLf, Constants.vbCrLf);
}
catch (Exception ex)
{
cellText = sheet(row, 0).Text;
}
rows.Add(cellText);
}
}
C1XLBook1.Load(filePath, FileFormat.OpenXml);
List
RichTextBox RichTextBox1 = new RichTextBox();
for (int stNo = 0; stNo <= C1XLBook1.Sheets.Count - 1; stNo++)
{
dynamic sheet = C1XLBook1.Sheets(stNo);
//Sheetが存在しなければ、処理を中止
if (sheet == null)
break; // TODO: might not be correct. Was : Exit For
//A列の値を取得
for (int row = 0; row <= sheet.Rows.Count - 1; row++)
{
//返却用文字列
string cellText = null;
try
{
// リッチテキストの場合、改行コード(vbLf)を「¥par」に置き換え
string value = Convert.ToString(sheet(row, 0).Value);
if ((value != null) && value.StartsWith("{¥¥rtf1"))
{
value = value.Replace(Constants.vbLf, "¥¥par");
}
RichTextBox1.Rtf = value;
dynamic plaintext = RichTextBox1.Text;
cellText = plaintext.Replace(Constants.vbLf, Constants.vbCrLf);
}
catch (Exception ex)
{
cellText = sheet(row, 0).Text;
}
rows.Add(cellText);
}
}
旧文書番号
81637