C# winform中如何通过新建EXCEL工作簿把SQL SERVER数据库中多张表导入EXCEL不同的sheet当中啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# winform中如何通过新建EXCEL工作簿把SQL SERVER数据库中多张表导入EXCEL不同的sheet当中啊相关的知识,希望对你有一定的参考价值。
C# winform中如何通过新建EXCEL工作簿把SQL SERVER数据库中多张表导入EXCEL不同的sheet当中啊,搞了一下午还是没搞定啊,默认只有一个sheet,如何添加多个sheet啊,还有啊 怎么比较快导入啊???万能的问问们。。
参考技术A 很多不定因素如数据量大小
以及客户端运行时的环境
都要考虑到
简单的导出可以看
http://hi.baidu.com/bin545/blog/item/acf3013b34019ee414cecb4f.html 参考技术B 去csdn上面求个sql to excel相关的操作类去。 然后好好看下就能搞定 别找我要 我这找不到了
C# - 如何将单个 Excel 工作表从一个工作簿复制到另一个工作簿?
【中文标题】C# - 如何将单个 Excel 工作表从一个工作簿复制到另一个工作簿?【英文标题】:C# - How to copy a single Excel worksheet from one workbook to another? 【发布时间】:2011-04-18 00:38:05 【问题描述】:我需要将工作表从一个工作簿复制到另一个工作簿,但我有点卡住了。前提是我有一个“主”工作簿,其中存储了许多报告的模板,然后我需要创建特定工作表的空白副本并将其添加到新工作簿中。
这是我目前所拥有的:
private void CreateNewWorkbook(Tables table)
Excel.Application app = null;
Excel.Workbook book = null;
Excel.Worksheet sheet = null;
try
string startPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);
string filePath = System.IO.Path.Combine(startPath, "sal1011forms.xls");
Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
app = new Excel.Application();
book = app.Workbooks.Open(filePath);
sheet = (Excel.Worksheet)book.Worksheets.get_Item((int)table + 1);
sfd.AddExtension = true;
sfd.FileName = table.ToString() + ".xls";
sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (sfd.ShowDialog() == true)
sheet.SaveAs(sfd.FileName);
finally
if (book != null)
book.Close();
if (app != null)
app.Quit();
this.ReleaseObject(sheet);
this.ReleaseObject(book);
this.ReleaseObject(app);
目前我遇到的唯一问题是,当我在工作表上调用 .Save() 时,它会将原始工作簿中的所有工作表保存到新工作簿中。有关如何纠正此问题的任何想法?
提前致谢, 桑尼
【问题讨论】:
您好,您在脚本组件中使用了哪些引用? 【参考方案1】:您也可以使用Sheet.Copy()
方法。
基本上,Sheet.copy
复制工作表,同时会自动创建一个新工作簿。
在您致电Worksheets.get_Item
之后,尝试将以下几行添加到您的代码中:
// Copies sheet and puts the copy into a new workbook
sheet.Copy(Type.Missing, Type.Missing);
// Sets the sheet variable to the copied sheet in the new workbook
sheet = app.Workbooks[2].Sheets[1];
这里也是Copy()
函数的参考:
MSDN Link
【讨论】:
【参考方案2】:我意识到这是一个有点晚的回复,但我对此感到很挣扎,所以我想我会发布我的解决方案,以便它可以帮助遇到这个问题的其他人。
有一张你想多次填写的模板:
public void test()
Excel.Application excelApp;
string fileTarget = "C:\target.xlsx";
string fileTemplate = "C:\template.xlsx";
excelApp = new Excel.Application();
Excel.Workbook wbTemp, wbTarget;
Excel.Worksheet sh;
//Create target workbook
wbTarget = excelApp.Workbooks.Open(fileTemplate);
//Fill target workbook
//Open the template sheet
sh = wbTarget.Worksheets["TEMPLATE"];
//Fill in some data
sh.Cells[1, 1] = "HELLO WORLD!";
//Rename sheet
sh.Name = "1. SHEET";
//Save file
wbTarget.SaveAs(fileTarget);
//Iterate through the rest of the files
for (int i = 1; i < 3; i++)
//Open template file in temporary workbook
wbTemp = excelApp.Workbooks.Open(fileTemplate);
//Fill temporary workbook
//Open the template sheet
sh = wbTemp.Worksheets["TEMPLATE"];
//Fill in some data
sh.Cells[1, 1] = "HELLO WORLD! FOR THE " + i + ".TH TIME";
//Rename sheet
sh.Name = i + ". SHEET";
//Copy sheet to target workbook
sh.Copy(wbTarget.Worksheets[1]);
//Close temporary workbook without saving
wbTemp.Close(false);
//Close and save target workbook
wbTarget.Close(true);
//Kill excelapp
excelApp.Quit();
【讨论】:
【参考方案3】:我想对这个问题给出一个答案,即使它被问到已经一年多了。我自己在开发一个项目时也遇到了同样的问题,我花了一段时间才找到答案。我将使用 VB.NET 代码而不是 C# 发布,因为我不熟悉最后一个。
这里是交易,为了在 Excel 工作簿之间复制工作表,绝对需要只使用一个 Excel 应用程序对象,然后使用该单个应用程序打开两个工作簿,然后我们可以使用已知的 Worksheet.Copy 方法并简单地指定该工作表是在其他工作簿中的工作表之后或之前复制的。
Private Sub ThisWorkbook_Startup() Handles Me.Startup
Me.Application.Workbooks.Open(filePath)
Me.Application.Workbooks(2).Worksheets("Reporte"). _
Copy(After:=Me.Application.Workbooks(1).Worksheets("Hoja1"))
Me.Application.Workbooks(2).Close()
Me.Application.DisplayAlerts = False
Globals.Hoja1.Delete()
Me.Application.DisplayAlerts = True
End Sub
在这种情况下,我使用的 Excel 应用程序是运行我的 Excel 工作簿项目的应用程序,但这也可以:
Dim xlApp As New Excel.Application
Dim book1 As Excel.Workbook
Dim book2 As Excel.Workbook
book1 = xlApp.Workbooks.Open(filePath1)
book2 = xlApp.Workbooks.Open(filePath2)
book1.Worksheets("Sheet to be copied").Copy(After:=book2.Worksheets(1))
当然,Excel 应用程序会显示两个工作簿,因此在完成复制后,如果您不打算显示源工作簿(或至少时间不足以让用户执行任何操作),则应关闭源工作簿。
xlApp.Workbooks(1).Close()
这是我可以做到的方式,用户会看到一个闪烁的新工作簿弹出然后关闭,这不是很整洁,但到目前为止我不知道该怎么做(或者做这个复制过程以不可见的方式)
我希望这仍然有一些价值。最好的问候。
【讨论】:
以上是关于C# winform中如何通过新建EXCEL工作簿把SQL SERVER数据库中多张表导入EXCEL不同的sheet当中啊的主要内容,如果未能解决你的问题,请参考以下文章
如何将一个 Excel 工作簿中的多个工作表合并成一个工作表?