原創|其它|編輯:郝浩|2009-04-24 10:00:11.000|閱讀 1728 次
概述:最近使用VSTO做了一個小項目,其中有一個需求是將一個Excel工作表中的很多個帶格式的區域,分別另存到單獨的Excel文件中,要求保留源格式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
最近使用VSTO做了一個小項目,其中有一個需求是將一個Excel工作表中的很多個帶格式的區域,分別另存到單獨的Excel文件中,要求保留源格式。
雖然需求很簡單,但也有幾個技術點要搞明白:
1.帶格式復制,但只復制值和格式,不復制公式,引用,校驗等等。
2.另存為Excel
第一個問題,開始我以為很簡單,直接使用選擇性粘貼,粘貼所有就行了,其實不是那么簡單。開始使用如下代碼:
ws.get_Range(beginCell, pasteRange).PasteSpecial
(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteAll,
Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,
Type.Missing, Type.Missing);
但發現復制出來的只是所有的值,格式都未復制出來。于是對Microsoft.Office.Interop.Excel.XlPasteType進行研究,發現有十幾個選項,逐個試驗,發現單獨使用任何一個枚舉都不能滿足我的要求。后來靈機一動,使用了兩次復制解決問題,一次復制值,一次復制格式!代碼如下:
Utility.SelectAndCopyRange方法是復制指定區域,代碼很簡單,核心代碼就一句:
Utility.CreatAndPaste方法是另存為的:
public static void CreatAndPaste(Excel.Application app,string pasteRange,string beginCell,string fileName)
{
//使用新的Excel進程添加一個新的工作簿
Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Add(Type.Missing);
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];
//粘貼
ws.get_Range(beginCell, pasteRange).PasteSpecial
(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteValues,
Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.
xlPasteSpecialOperationNone, Type.Missing, Type.Missing);
ws.get_Range(beginCell, pasteRange).PasteSpecial
(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteFormats,
Microsoft.Office.Interop.Excel.XlPasteSpecialOperation.
xlPasteSpecialOperationNone, Type.Missing, Type.Missing);
ws.get_Range(beginCell, pasteRange).Columns.AutoFit();
//保存
wb.SaveCopyAs(fileName);
//關閉工作簿
Clipboard.Clear();
wb.Close(false, Type.Missing, Type.Missing);
}
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:博客園