Hej. Du får nog anropa en websida, som har content-type excel/application eller vad det nu heter. Tror jag löst det själv, jag testade så här och det verkar funka.Returnera en Excel-fil från WebService?
Kan man returnera en Excel-fil från en WebService, jag vet att jag kan returnera den som en byte-array men det är inte riktigt vad jag är ute efter i detta fall.
Från en applikation, kan programmeras med VBA, som körs hos användaren vill jag när användaren exekverar ett VBA skript anropa en WebService med en parameter (detta är inget problem). WebServicen använder en på servern befintlig Excelmall och utiftrån inparametern och Excelmallen skapas en rapport som helst inte ska sparas på servern utan returneras till användaren och Excell öppnas på användarens dator, på samma sätt som när man i en webläsare klickar på en länk till en Excellfil.
Användarna finns i ett Intranet och alla har Excel.
Någon som har ett bra förslag på hur Webservicen ska se ut och framför allt vad ska den returnera, jag har försökt att returnera både Excel- applikation och workbook men får felmeddelande om att de kan inte serialiseras.
Tack på förhand
JanneSv: Returnera en Excel-fil från WebService?
Sen anropar den i sin tur webservicen som skickar en byte-array.
Då kan din VBA anropa websidan som kommer starta Excel.
/mickeSv:Returnera en Excel-fil från WebService?
<code>
[WebMethod]
public void GetReport(int selector)
{
const string ReportName = "MyReport";
byte[] abytBuffer = BuildFile(selector);
HttpResponse response = HttpContext.Current.Response;
FileInfo f = new FileInfo(fileName);
response.AddHeader("Content-Disposition", "attachment; filename=" + ReportName);
response.AddHeader("Content-Length", abytBuffer.Length.ToString());
response.AddHeader("Content-Transfer-Encoding", "binary");
response.ContentType = "application/msexcel";
response.BinaryWrite(abytBuffer);
response.End();
}
private byte[] BuildFile(int selector)
{
//Kod för att skapa en byte-array av rapportfilenFileStream fs = null;
//Returnerar en byte-array
}
</code>