1

1996 年から UNIX マシンによって生成された次の出力があります... Windows 用のソフトウェアをアップグレードしており、この正確な出力を作成する必要がありますhttp://pastebin.com/YBHpSYDW from C#

方法がわからないので、処理できない問題がいくつかあります...

プレーンテキストの場合、列を決定し、「IMPORTE」列の配置を右に設定するにはどうすればよいですか?

私はこの出力をより読みやすく、柔軟な Excel で行いました..しかし、彼らはこの不気味な古いものを望んいます.ソフトウェアですが、すべての古い不気味なものを@出力に保持します...

誰かがこれを行う方法を知っていれば、とても役に立ちます、ありがとう。

編集 出力は SQL Server からのデータのリストです。古いデータは MultiValue .DAT および .IDX ファイルに格納されていましたが、現在は SQL Server に格納されています...基本的に、値を生成するコードは次のとおりです。

var Query = getRows(sel.DataTable).Select(row =>
{
    return new
    {
        banco = row["banco"].ToString(),
        emisora = row["emisora"].ToString(),
        sucursal = row["sucursal"].ToString(),
        fecha = row["fecha"].ToString(),
        identificacion = row["identificacion"].ToString(),
        importe = row["importe"].ToString(),
        importe_dec = row["importe_dec"].ToString(),
        provincia = row["provincia"].ToString(),
        referencia = row["referencia"].ToString(),
    };
});

次に、魔法を作るためにいくつかの foreach を実行します...たとえば

foreach (var banco in Query.GroupBy(l => l.banco))

問題は、印刷用の出力ファイルです...

EDIT 2 動作しました。コードは次のとおりです

private void generarFicheroPrt()
{
    try
    {
        SelectBD sel = new SelectBD(Program.ConexBD, "SELECT * FROM Seguros");
        var Query = getRows(sel.DataTable).Select(row =>
        {
            return new
            {
                banco = row["banco"].ToString(),
                emisora = row["emisora"].ToString(),
                sucursal = row["sucursal"].ToString(),
                fecha = row["fecha"].ToString(),
                identificacion = row["identificacion"].ToString(),
                importe = row["importe"].ToString(),
                importe_dec = row["importe_dec"].ToString(),
                provincia = row["provincia"].ToString(),
                referencia = row["referencia"].ToString(),
            };
        });
        using (StreamWriter sw = new StreamWriter(Program.path + @"\CV9005.prt"))
        {
            int i = 1;
            int pag = 0;
            int linea = 1;
            sw.WriteLine();
            sw.WriteLine("\x1b&l1O\x1b(s14H");
            decimal total = 0;
            foreach (var valor in Query.OrderBy(l => l.emisora))
            {
                if (linea == 48) linea = 1;
                if (linea == 1)
                {
                    pag++;
                    sw.WriteLine("\xc\t0125 BANCOFAR" + string.Empty.PadLeft(37, '\x20') + "COBRO POR VENTANILLA S. S. - CONTROL DE DOCUMENTOS     PAG.     "+ pag  +"\n\n");
                    sw.WriteLine("\t N.ORDEN  NUMERO REFERENCIA           IMPORTE  SUC.  EMISORA");
                    sw.WriteLine("\t -------  -----------------  ----------------  ----  -----------------------------------------------------------");
                    sw.WriteLine();
                }
                setSufijoEmisora(valor.emisora);
                decimal importe = Convert.ToDecimal(Int32.Parse(valor.importe) + "," + valor.importe_dec);
                string imp = importe.ToString("N2", Cultures.Spain);
                sw.WriteLine("\t\t" + string.Format("{0, 4}\t{1, -13}\t\t{2, 13}{3,6}  {4, -59}", i.ToString(), valor.referencia, imp, valor.sucursal, valor.emisora + " " + sufijoEmisora));
                i++;
                linea++;
                total = total + importe;
            }
            sw.WriteLine();
            sw.WriteLine("\t\t\t\t\t TOTAL .....\t" + string.Format("{0, 13}", total.ToString("N2", Cultures.Spain)));
        };
    }
    catch (Exception ex)
    {
        Logger.log(ex);
    }
}
4

1 に答える 1

1

ツールボックスから「PrintDocument」ツールを使用します。

http://msdn.microsoft.com/en-gb/library/system.drawing.printing.printdocument%28v=vs.110%29.aspx

これは、基本的な書式設定に役立ちます。

編集

よりリッチな書式設定とファイルへの保存を行うには、Microsoft.Office.Core 名前空間を使用します。

http://msdn.microsoft.com/en-us/library/microsoft.office.core.aspx

非 ASCII エンコーディングが必要な場合は、必要に応じてエンコーディングを設定し、必要なエンコーディングでファイルを保存してください。

http://msdn.microsoft.com/en-us/library/microsoft.office.core.msoencoding.aspx

using(StreamWriter writer = new StreamWriter("a.txt", false, Encoding.UTF8))
{
   writer.WriteLine(s);
}
于 2013-04-05T08:24:04.693 に答える