У меня есть приложение в asp.net mvc.В котором мне нужно записать данные из базы данных в таблицу Excel, которую я храню в своем проекте.Я использую Microsoft.Office.Interop.Excel dll для выполнения действий над файлом Excel.А также печать этого файла Excel с использованием DLL, которая принимает принтер по умолчанию на стороне сервера.
Таким образом, если клиент нажимает кнопку печати, печать также начинается на серверном принтере, а не на клиентском, потому что мой код процесса Excel находится на серверной стороне.И мне нужно упомянуть об этом, потому что, если клиент выберет несколько чекбоксов записей, то в соответствии с изменением таблицы требований и условий Excel и распечатывает данные в ячейках Excel в соответствии с большим количеством условий.
Так что сейчас, когда клиент выберетнесколько записей и нажмите кнопку «Печать», затем я помещаю записи в файл Excel, затем распечатываю этот файл Excel, очищаю этот файл и снова запускаю этот процесс для записи № 2 согласно требованию и т. д.
Так что теперь мне нужноначать печать на клиентском принтере вместо серверного.Я проверил на 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, распечатываем и очищаем ее.Итак, как сохранить все это требование и распечатать на клиентском принтере?