首页 新闻 会员 周边

关于用C#操作EXCEL文件

0
悬赏园豆:15 [已解决问题] 解决于 2019-03-18 13:44

对一个已存在的EXCEL,它里面有多个SHEET,我想取其中的某一个SHEET,然后将它保存到一个新的EXCEL中,旧文件删除,新文件的名字与旧文件相同,要如何操作

JohnZhangEX的主页 JohnZhangEX | 初学一级 | 园豆:149
提问于:2019-03-15 10:46
< >
分享
最佳答案
0

查了写资料,发现可以用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秒以上的时间才能完成,应该还有更好的方法能够实现

JohnZhangEX | 初学一级 |园豆:149 | 2019-03-18 13:41
其他回答(4)
1

NPOI,按照你这个思路去做就能实现

收获园豆:5
ifz | 园豆:302 (菜鸟二级) | 2019-03-15 10:50
0

同楼上NPOI

收获园豆:5
筱浬 | 园豆:601 (小虾三级) | 2019-03-15 11:04
0

NPOI应该可以,不过最好注意一下这个类库的内存占用情况,不理想再找找其它的,相关的类库有不少。

收获园豆:5
会长 | 园豆:12401 (专家六级) | 2019-03-15 11:55

我用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();

支持(0) 反对(0) JohnZhangEX | 园豆:149 (初学一级) | 2019-03-15 14:21
0

可以通过复制工作表的方法来实现:

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

E-iceblue | 园豆:431 (菜鸟二级) | 2019-03-15 12:02

我用的VS2008引用不了这个dll

支持(0) 反对(0) JohnZhangEX | 园豆:149 (初学一级) | 2019-03-15 15:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册