2017-06-16 11 views
-2

これは私のコードです:Qtで.xlsx形式を印刷するには?

QPrinter printer; 
QPrintDialog dialog(&printer, this); 
printer.setPageSize(QPrinter::A4); 
printer.setOrientation(QPrinter::Portrait); 
printer.setPageMargins (15,15,15,15,QPrinter::Millimeter); 
printer.setFullPage(false); 
printer.setOutputFormat(QPrinter::NativeFormat); 
if(dialog.exec() != dialog.Accepted) { 
    return; 
} 

QPainter painter(&printer); 
painter.setFont(QFont("Tahoma",15)); 
QFile file; 
file.setFileName("D:/cedvel2017.xlsx"); 
file.open(QFile::ReadOnly); 
char line[1024]; 
int lineNum = 0; 
while(file.readLine(line,1024)>0) { 
    lineNum++; 
    QString str(line); 
    painter.drawText(10,40*lineNum,str); 
    qDebug() << str; 
} 
file.close(); 
painter.end(); 

しかし、私は、印刷に問題があります。テーブルを印刷するとき、そのデータは正規のフォーマットでは表示されません。 UTF-8には問題があります。あなたはハードプリントされたコピーhereを見ることができます。

どうすれば解決できますか?

+2

伝説のスレッドで掲示する – user2722968

+3

何が起こると思いますか?イメージを同じ方法で印刷しますか? (ファイルを開き、紙にバイナリコンテンツを書き込むのですか?)あなたとExcelレンダラが必要です。 – RvdK

+0

Excelのように印刷されていることが期待されました。 –

答えて

3

あなたが見ているのは、バイナリファイル自体のutf-8デコード版です。このデータを印刷できるものにするには、Excel互換のレンダラが必要です。私の頭のうち

  • あなたがMacOSの上にある場合、あなたはJPGファイルとしてラフプレビューを取得するためにqlmanageを使用することができます。おそらく簡単に印刷することはできますが、プレビューの作成方法(たとえば、最初のシートのみが表示されます)を制御することはできません。
  • Windowsでは、COM - Excelのインストールを制御して、そのファイルにすべてのシートを印刷するように要求できます。
  • APIコントロールでLibre-またはOpenOfficeでも同じことをすることができます。
+0

リンクを共有したり、例を表示したりできますか? –

+0

どこでコードを修正する必要がありますか? –

+0

IIRCの場合、 'excel.exe -print path/to/Document.xls'を呼び出すと、何となく意味のあるものを印刷するだけです。より多くのコントロールが必要な場合は、いくつかのグーグルで "エクセルOLE API"または "エクセルCOM API" – user2722968

関連する問題