Как я могу получить Входной Поток от Объекта HSSFWorkbook

Алхамдулилла решен ..

public Array GetTotalResearchByArea()
{
    var list = new List<int>();
    var all_area = context.Areas.Select(x => x.Id ).ToList();

    foreach( var item in all_area)
    {
        var allReserachCategory = context.ResearchCategories.Where(a => a.AreaId == item).Select(a => a.Id).ToList();
        var totalResearchBySingleArea = context.Researchs.Where(c => allReserachCategory.Contains(c.ResearchCategoryId)).Count();
        list.Add(totalResearchBySingleArea);
    }
    return list.ToArray();
}
11
задан Wivani 20 September 2011 в 15:18
поделиться

2 ответа

Проблема с Вашим вопросом состоит в том, что Вы смешиваете OutputStreams и InputStreams. InputStream - что-то, из чего Вы читаете, и OutputStream - что-то, во что Вы пишете.

Это - то, как я пишу объект ПОИ в поток вывода.

// this part is important to let the browser know what you're sending
response.setContentType("application/vnd.ms-excel");
// the next two lines make the report a downloadable file;
// leave this out if you want IE to show the file in the browser window
String fileName = "Blah_Report.xls";
response.setHeader("Content-Disposition", "attachment; filename=" + fileName); 

// get the workbook from wherever
HSSFWorkbook wb = getWorkbook();
OutputStream out = response.getOutputStream();
try {
   wb.write(out);
}       
catch (IOException ioe) { 
  // if this happens there is probably no way to report the error to the user
  if (!response.isCommited()) {
    response.setContentType("text/html");
    // show response text now
  }
}

Если бы Вы хотели снова использовать свой существующий код, то необходимо было бы хранить данные ПОИ где-нибудь, затем превращают ЭТО во входной поток. Это было бы легко сделано путем записи этого в ByteArrayOutputStream, затем читая те байты с помощью ByteArrayInputStream, но я не рекомендую это. Ваш существующий метод был бы более полезным как универсальная реализация Канала, где можно передать данные по каналу от InputStream до и OutputStream, но Вам не нужен он для записи объектов ПОИ.

10
ответ дан 3 December 2019 в 09:21
поделиться

Я думаю, что понимаю то, что Вы пытаетесь сделать (возможно, я недостаточно поднимаюсь, хотя),

Вам действительно не нужно так много кода - проверяют метод записи -

HSSFWorkbook wb = new HSSFWorkBook();
//populate

ServletOutputStream out = response.getOutputStream();
try {
   wb.write(out);
   out.flush();
}       
catch (IOException ioe) { 
   //whatever
}
out.close();

Насколько я помню, когда я работал w/ПОИ, это - то, что я сделал. Если Вы в веб-платформе, Вам, вероятно, придется обмануть ее так, чтобы платформа не пыталась сделать что-то с, что ServletOutputStream после закрытия ее. Если это попробует, то Вы получите бросок исключения, говоря Вам, что поток вывода уже закрывается.

0
ответ дан 3 December 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: