[C#] ExcelからPDFに変換したら、改行コードが点(・)に文字化けした

シェアする

  • このエントリーをはてなブックマークに追加

PDFで改行コードの場所で文字化けしてしまいました。

こういった文字化けは、ITエンジニアを長年やっているとよく遭遇する問題です。

改行コードについては、改行コードの変換 UNIX(LF) Windows(CR+LF) MacOS(CR) で説明してあります。

スポンサードリンク

[C#] ExcelからPDFに変換したら、改行コードが点(・)に文字化けした

以下のようなプログラムをC#で書いてみました。

Range range1 = sheet1.Range["AN9", "AW12"];
range1.MergeCells = true;
range1.Value = "あああ" + Environment.NewLine + "いいい" + Environment.NewLine + "ううう" + Environment.NewLine + "えええ";

Excelでは、以下のように表示されました。
image

これをPDFに変換してみました。

image

あれあれ?・に文字化けしているではないですか。

 

いろいろと試してみたところ、以下のように修正するとよいようです。

range1.Value = "あああ" + "\n" + "いいい" + "\n" + "ううう" + "\n" + "えええ";

image

これは奇妙です。

わざわざ、OSに非依存のEnvironment.NewLineを使って改行しているのに、この方法はダメで、LF(“\n”)にしないと文字化けしてしまうんですね。

スポンサードリンク

Excelのセル内改行コードは0x0A(LF, “\n”)

よくよく調べてみたところ、Excelのセル内で、ALT+Enterで改行したときに、改行コードは0x0A(LF)が入るようです。

 

そこで、今度は試しに、0x0D(CR, “\r”)を入力してみました。

range1.Value = "あああ" + "\r" + "いいい" + "\r" + "ううう" + "\r" + "えええ";

0x0D(CR, “\r”)を入力すると、Excelのセル内では無視され、

image

ExcelをPDFに変換すると0x0D(CR, “\r”)は点(・)に文字化けするようです。

image

スポンサードリンク

C#にVBのvbCr、vbLf、vbCrLfといったマクロ定義はない

VBの場合、以下のような感じで、テキストの中のCRLFをLFに変換すればよいようです。

Sheet1.Range("A1").Value = Replace(Me.TextBox1.Text, vbCrLf, vbLf)

ところで、VBではvbCr(ControlChars.Cr)、vbLF(ControlChars.Lf)、vbCrLf(ControlChars.CrLf)といったマクロが定義されていますが、C#にはこの種のマクロ定義は存在しないようです。

直接、プログラムにエスケープコードを書くことに違和感のある人は以下のようなクラスを追加するしかないようです。

public sealed class ControlChars {
public const char Back = '\b';
public const char Cr = '\r';
public const string CrLf = "\r\n";
public const char FormFeed = '\f';
public const char Lf = '\n';
public const string NewLine = "\r\n";
public const char NullChar = '\0';
public const char Quote = '"';
public const char Tab = '\t';
public const char VerticalTab = '\v';
}

この記事、お役に立ちましたら、シェアをお願いします。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です