i asp.net MVC中有一个应用程序。我需要将数据库写入我的项目位置存储的Excel表。我正在使用Microsoft.office.interop.excel dll在Excel文件上进行操作。还使用DLL打印该Excel文件,DLL将默认打印机在服务器端上进行。
因此,如果客户端单击"打印"按钮,则还在服务器端打印机上不在客户端打印机上打印启动,因为我的Excel Process代码在服务器端。我需要在此处提及它,因为如果客户端将选择多个记录的车臣框,则根据要求/条件Excel表的更改并根据很多条件在Excel单元中打印数据。
现在,当客户端将选择多个记录并单击"打印"按钮时,我将记录放在Excel文件中,然后打印该excel文件并清洁该文件,然后根据要求,以记录编号2启动此过程。<<<<<<<<。/p>
所以现在我需要开始在客户端打印机上而不是服务器端打印机上打印。我已经检查了Google是否有此问题,但几乎他们建议使用第三方DLL或依赖性。但是,如果可以在没有第三方依赖性的情况下在客户端打印机上打印,那么它将对我们最好。
所以请建议我要执行此任务我该怎么办?
public ActionResult Report(List<int> groundIds)
{
if (groundIds != null)
{
List<GroundWaterSchedulereportModel> gwFormModelLists = new List<GroundWaterSchedulereportModel>();
GroundWaterModel groundWaterModel = new GroundWaterModel();
var groundIdsString = string.Join(",", groundIds);
if(groundIdsString.Length > 0 && groundIdsString.Length < 8000)
{
var list = groundWaterLogic.GroundWaterReport(groundIdsString);
var uniqueListVillage = list.Select(q => q.villageName).Distinct();
foreach (var itemCode in uniqueListVillage)
{
int count = 0;
bool printed = false;
bool headerPrint = false;
List<GroundWaterSchedulereportModel> gwUniqueVillageWiseList = list.Where(x => x.villageName == itemCode).ToList();
foreach (var item1 in gwUniqueVillageWiseList)
{
if (count <= 7)
{
IsOpened(excelFilePath);
groundWaterModel.OpenExcel(); //open excel file which is store in project's location
groundWaterModel.AddDataToExcel(item1, count, headerPrint); //write data into excel file
groundWaterModel.closeExcel(); //close excel file after write data
if (count == 7)
{
printed = true;
PrintMyExcelFile(); //Printing start on server side default printer
groundWaterModel.OpenExcel(); //after print it open excel file again
groundWaterModel.ClearExcel(); //it's clearing cells excel file
groundWaterModel.closeExcel(); //close excel file after clear cells
IsOpened(excelFilePath);
count = -1;
}
else
{
printed = false;
headerPrint = false;
}
count++;
}
}
if (printed == false)
{
PrintMyExcelFile(); //Printing start on server side default printer
groundWaterModel.OpenExcel();
groundWaterModel.ClearExcel();
groundWaterModel.closeExcel();
IsOpened(excelFilePath);
count = -1;
}
}
}
else
{
}
}
return RedirectToAction("Index");
}
这是我的功能,它是默认打印机上的打印excel文件,它将默认打印机放在服务器端。
void PrintMyExcelFile()
{
IsOpened(excelFilePath);
Excel.Application excelApp = new Excel.Application();
// Open the Workbook:
Excel.Workbook wb = excelApp.Workbooks.Open(
excelFilePath,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// Get the first worksheet.
// (Excel uses base 1 indexing, not base 0.)
Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];
// Print out 1 copy to the default printer:
ws.PrintOut(
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// Cleanup:
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(ws);
wb.Close(false, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(wb);
excelApp.Quit();
Marshal.FinalReleaseComObject(excelApp);
}
因此,我需要在客户端打印机上打印Excel表。最主要的是,每当我们在Excel文件中编写记录时,将其打印并清除它,然后再次在Excel文件中编写第二个记录并将其清除。那么如何维护所有这些要求并在客户端打印机上打印?
你不能*
*,除非您要为用户提供可以安装的客户端应用程序,然后您可以与您进行通信,以便它可以使用客户端打印机,或者您的服务器是同一大型网络的一部分(我是我思考大学校园(,服务器是打印机和打印机可以共享和联系的,那么您将无法成功地将服务器打印到网站用户的打印机
创建文件,以下载方式将文件发送给用户,让他们打印;这是他们的问题,而不是您的问题。
顺便说一句,您应该考虑使用epplus或类似的方法以在服务器上创建excel文件,而不是互动。您还可以考虑创建您当前放入Excel中的任何数据的网页表版本,向用户显示页面,并在加载后,使用JavaScript调用他们的打印过程/显示他们的打印对话框,然后他们将将您的网页打印到他们的打印机