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

プログラミング

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

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

改行コードについては、

改行コードの変換 UNIX(LF) Windows(CR+LF) MacOS(CR)
改行コードって、UNOX、Windows、MacOSでは、OSによって違うんですね。 ちょっとまとめてみました。 ...

で説明してあります。

スポンサーリンク
スポンサーリンク

[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';
}

プログラミングの無料レッスン体験

約8,000名の受講生と80社以上の導入実績のあるプログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp

<Codecampの特徴>

1 現役エンジニアによる指導

2オンラインでのマンツーマン形式の講義

3大手企業にも導入されている実践的なカリキュラム

↓無料体験レッスン実施中です。

プログラミングのオンラインスクールCodeCamp