Componente .NET para Excel geração planilha 2003, utilizando modelos para formatar
-
05-07-2019 - |
Pergunta
O problema meu aplicativo está tentando resolver é o seguinte:
Atualmente, vários procedimentos armazenados são executados, os dados são copiados manualmente a partir dos resultados SQL em uma planilha em branco, e relatórios analistas formatar os dados. Este processo tem sido considerado muito longo e dispendioso.
A solução ideal (em minha mente) é um aplicativo .NET com um componente que pode levar um resultado procedimento armazenado e gravá-lo em um intervalo de células específico em um modelo de planilha (mantendo modelo de formatação) e, em seguida, eu posso simplesmente agrupar o resultados em pastas de trabalho no aplicativo .NET.
Existem tais aplicações lá fora? Mesmo melhor, alguém tem alguma soluções melhores?
Obrigado por sua consideração.
Solução
O que eu uso para definir os dados
obter os dados na forma de
object[,] excelSpreadsheetData
, em seguida, aplicar os dados, definindo
public void SetWorksheetData(long rowCount, long columnCount, object[,] excelSpreadsheetData, int startingRow, int startingCol, Worksheet worksheet)
{
if (rowCount == 0 || columnCount == 0) return;
//set the region data.
object m_objOpt = Missing.Value;
Range cellRange = worksheet.get_Range(ExcelGeneratorUtils.ExcelColumnFromNumber(startingCol) + startingRow, m_objOpt);
cellRange = cellRange.get_Resize(rowCount, columnCount);
cellRange.set_Value(m_objOpt, excelSpreadsheetData);
}
Isso deve manter o modelo de formatação, e define os dados de uma só vez, muito mais rápido do que defini-lo de células, por celular.
Espero que ajude
Outras dicas
SpreadsheetGear for .NET vai deixar você abrir planilhas do Excel, conecte valores e salvar a pasta de trabalho.
Você pode ver amostras de relatórios Excel (ou seja, a exportação para Excel) aqui e baixar uma versão gratuita aqui .
Disclaimer: eu próprio SpreadsheetGear LLC
Você sempre pode usar o Excel Automation através de interoperabilidade. Eu tenho feito isso na ocasião quando a saída desejada for Excel. Sua surpreendentemente rápido, você tem que ter cuidado para limpar depois de si mesmo e não deixar instâncias do Excel em execução. Aqui está um exemplo breve.
using Excel = Microsoft.Office.Interop.Excel;
Excel.ApplicationClass _Excel;
Excel.Workbook WB;
Excel.Worksheet WS;
_Excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
WB = _Excel.Workbooks.Add(System.Reflection.Missing.Value);
WS = (Excel.Worksheet)WB.Worksheets[1];
WS.Name = "Test";
try
{
int row;
int col;
WS.Cells[++row, col] = "COL1";
WS.Cells[row, ++col] = "COL2";
WS.get_Range("A1", "A2").Font.Bold = true;
WS.get_Range("A1", "A2").HorizontalAlignment =Excel.XlHAlign.xlHAlignCenter;
WS.Cells[++row, col] = "Customer";
WS.Cells[++row, col] = "Expenses"
WS.get_Range("A1", "B1").Font.Bold = true;
WS.Columns.AutoFit();
WS.Rows.AutoFit();
WS.Activate();
_Excel.Visible = true;
}
catch (Exception ex)
{
WB.Close(false, Type.Missing, Type.Missing);
_Excel.Quit();
throw;
}
finally
{
GC.Collect();
GC.WaitForPendingFinalizers();
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WS);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(WB);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(_Excel);
}
Na esta questão eu pedi algo semelhante. A diferença é que eu quero algo para gerar um arquivo XML que é interpretada pelo Excel como uma planilha. Se você pudesse enviar os dados para um arquivo XML, em seguida, transformar o XML para SpreadsheetML, então isso pode resolver o seu problema. SpreadsheetXM tem algumas limitações, no entanto. Ele não vai exigir Excel para ser instalado e a transformação pode ser muito rápido. E se você usar o Excel 2007, em seguida, há um segundo formato XML que você pode usar, o Microsoft Office XML formato. Basicamente, é lento porque eu suspeito que o seu código atual está interagindo com o Excel através de COM.