对一个已存在的EXCEL,它里面有多个SHEET,我想取其中的某一个SHEET,然后将它保存到一个新的EXCEL中,旧文件删除,新文件的名字与旧文件相同,要如何操作
查了写资料,发现可以用VS自带的Microsoft.Office.Interop.Excel来解决,具体代码如下
Excel.Application App = new Excel.Application();
Excel.Workbooks wbks = App.Workbooks;
Excel._Workbook _wbk = wbks.Add(filePath);
Excel.Sheets shs = _wbk.Sheets;
Excel._Worksheet _wsh = (Excel._Worksheet)shs.get_Item(1);
App.DisplayAlerts = false;
_wsh.Delete();
App.AlertBeforeOverwriting = false;
object missing = Missing.Value;
_wbk.SaveAs("\\D:\新建文件夹\" + fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
App.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(App);
App = null;
但是在执行的时候需要耗费5秒以上的时间才能完成,应该还有更好的方法能够实现
NPOI,按照你这个思路去做就能实现
同楼上NPOI
NPOI应该可以,不过最好注意一下这个类库的内存占用情况,不理想再找找其它的,相关的类库有不少。
我用NPOI的方法做,但是结果出来的文件损坏了打不开,我的代码如下
string filePath = frm.FileName;
int position = filePath.LastIndexOf("\");
string fileName = filePath.Substring(position + 1);
XSSFWorkbook wk = new XSSFWorkbook(new FileStream(filePath, FileMode.Open, FileAccess.Read));
ISheet hs = wk.GetSheet("C");
XSSFWorkbook wk2 = new XSSFWorkbook();
//wk2.CreateSheet("Sheet1");//为文档添加一页
FileStream file = new FileStream("\\172.21.97.7\新建文件夹\" + fileName, FileMode.Create);
wk2.Add(hs);
wk2.Write(file);
file.Close();
可以通过复制工作表的方法来实现:
using Spire.Xls;
namespace CopyWorksheet_XLS
{
class Program
{
static void Main(string[] args)
{
//加载第1个Excel文件
Workbook workbook1 = new Workbook();
workbook1.LoadFromFile("sample1.xlsx");
//获取指定工作表
Worksheet sheet1 = workbook1.Worksheets[0];
//加载第2个Excel文件
Workbook workbook2 = new Workbook();
workbook2.LoadFromFile("sample2.xlsx");
//调用方法AddCopy()将第1个Excel文件的sheet1复制到第二个Excel文件,并命名复制后的工作表
Worksheet sheet2 = workbook2.Worksheets.AddCopy(sheet1);
sheet2.Name = "成绩单";
//删除原Excel文件中的第一个工作表
sheet1.Remove();
//保存文档1和文档2
workbook1.SaveToFile("newsample1.xlsx");
workbook2.SaveToFile("newsample2.xlsx");
}
}
}
这里使用的免费版的Excel库,Free Spire.XLS for .NET
我用的VS2008引用不了这个dll