您的位置:首页 > 其它

在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式

2011-05-25 21:44 507 查看
public class Invoker

{

public SaveFileDialog InvokeDialog;

private Thread InvokeThread;

private DialogResult InvokeResult;

public Invoker()

{

InvokeDialog = new SaveFileDialog();

InvokeThread = new Thread(new ThreadStart(InvokeMethod));

InvokeThread.SetApartmentState(ApartmentState.STA);

InvokeResult = DialogResult.None;

}

public DialogResult Invoke()

{

InvokeThread.Start();

InvokeThread.Join();

return InvokeResult;

}

private void InvokeMethod()

{

InvokeResult = InvokeDialog.ShowDialog();

}

}

private void ExportExcel(SAPbouiCOM.Matrix ma)

{

int count = 0;

List<int> list = new List<int>();

for (int r = 0; r < ma.RowCount; r++)

{

SAPbouiCOM.CheckBox chkChoose = (SAPbouiCOM.CheckBox)ma.Columns.Item("Choose").Cells.Item(r + 1).Specific;

if (chkChoose.Checked == true)

{

list.Add(r);

count ++;

}

}

if (count == 0)

{

MessageBoxFrame("请选择一项!", 3, "OK", "", "", true);

return;

}

string saveFileName = "";

Invoker inv = new Invoker();

inv.InvokeDialog.DefaultExt = "xls";

inv.InvokeDialog.Filter = "Excel文件|*.xls";

inv.Invoke();

saveFileName = inv.InvokeDialog.FileName;

System.Reflection.Missing miss = System.Reflection.Missing.Value;

Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();

excel.Application.Workbooks.Add(true); ;

excel.Visible = false;//若是true,则在导出的时候会显示EXcel界面。

if (excel == null)

{

MessageBoxFrame("EXCEL无法启动!", 3, "OK", "", "", true);

return;

}

Microsoft.Office.Interop.Excel.Workbooks books = (Microsoft.Office.Interop.Excel.Workbooks)excel.Workbooks;

Microsoft.Office.Interop.Excel.Workbook book = (Microsoft.Office.Interop.Excel.Workbook)(books.Add(miss));

Microsoft.Office.Interop.Excel.Worksheet sheet = (Microsoft.Office.Interop.Excel.Worksheet)book.ActiveSheet;

//写入标题

for (int i = 0; i < ma.Columns.Count - 2; i++)

{

excel.Cells[1, i + 1] = ma.Columns.Item(i + 2).Title;

}

//写入数值

for (int r = 0; r < list.Count; r++)

{

for (int i = 0; i < ma.Columns.Count - 2; i++)

{

excel.Cells[r + 2, i + 1] = ((SAPbouiCOM.EditText)ma.Columns.Item(i + 2).Cells.Item(list[r] + 1).Specific).Value;

}

}

excel.Columns.EntireColumn.AutoFit();//列宽自适应

if (inv.InvokeResult==DialogResult.Cancel)

{

return;

}

if (saveFileName == "")

{

MessageBoxFrame("请输入文件名!", 3, "OK", "", "", true);

return;

}

try

{

sheet.SaveAs(saveFileName, miss, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss);

}

catch (Exception ex)

{

MessageBoxFrame(ex.ToString(), 3, "OK", "", "", true);

return;

}

book.Close(false, miss, miss);

books.Close();

excel.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);

System.Runtime.InteropServices.Marshal.ReleaseComObject(book);

System.Runtime.InteropServices.Marshal.ReleaseComObject(books);

System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);

GC.Collect();

MessageBoxFrame("数据导出成功!", 3, "OK", "", "", true);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐