私はうまく動作しているようだ、次のアプローチは、しかし、それは同じように、代わりに私は、ユーザーに選択肢を与えるためにそれをたいと思い、事前に定義された場所にファイルを保存し実装しました通常のダウンロードポップアップ:開く、保存する、名前を付けて保存する。何か案が?。名前を付けて保存/開く]で必要なポップアップ
例外「OLEの呼び出しを行うことができる前に、現在のスレッドがシングルスレッドアパートメント(STA)モードに設定する必要があります」克服するために、スレッドは、EDITを参照して、実装する必要がありました!
EDIT:EDIT OF
1)
using System.Threading;
2)
[STAThread]
private static void ExportToExcel(DataTable dt)
{
Thread t = new Thread(SaveIt);
t.SetApartmentState(ApartmentState.STA);
t.Start(dt);
}
3)
static void SaveIt(Object dt)
{
DataTable table = (DataTable)dt;
System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog();
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
SaveName = sfd.FileName;
else
SaveName = "ResourceProfile";
workbook.SaveAs(.....
}
END。
private static void ExportToExcel(DataTable dt)
{
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
Microsoft.Office.Interop.Excel.Workbook workbook = excel.Application.Workbooks.Add(true);
int iCol = 0;
foreach (DataColumn c in dt.Columns)
{
iCol++;
excel.Cells[1, iCol] = c.ColumnName;
}
int iRow = 0;
foreach (DataRow r in dt.Rows)
{
iRow++;
// add each row's cell data...
iCol = 0;
foreach (DataColumn c in dt.Columns)
{
iCol++;
excel.Cells[iRow + 1, iCol] = r[c.ColumnName];
}
}
object missing = System.Reflection.Missing.Value;
DateTime CurrentDate = DateTime.Now;
String CurDate = CurrentDate.ToShortDateString().Replace("/",".");
workbook.SaveAs("ResourceProfile-" + CurDate + ".xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlXMLSpreadsheet, missing, missing, false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing);
excel.Visible = true;
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)excel.ActiveSheet;
((Microsoft.Office.Interop.Excel._Worksheet)worksheet).Activate();
((Microsoft.Office.Interop.Excel._Application)excel).Quit();
}
ありがとうございます。私はSFDを追加し、「sfd.ShowDialog()」に達した時点で次のエラーを受け取っています。現在のスレッドは、OLE呼び出しを行う前にシングルスレッドアパートメント(STA)モードに設定する必要があります。 Main関数にSTAThreadAttributeが設定されていることを確認してください。この例外は、デバッガがプロセスにアタッチされている場合にのみ発生します。それはどんな鐘も鳴らしますか? – Jake
コードは通常正常に動作します。バックグラウンドスレッドで処理していますか?エラーメッセージによると、 'Main'関数に' STAThreadAttribute'を追加することができます。それはデバッガの下でのみ発生するので、あなたのアプリケーションを実行している実際のプロセスであるデバッガと何か関係があるかもしれません。申し訳ありませんが、私はその問題の答えを知らない。 2番目のコードセグメント(Excelの独自のダイアログを使用)は何か変更されますか? –
は、それは全くのAjaxとは何かを持ってもらえますか?私はあなたの他の解決策を調べようとしています。 – Jake