У меня есть существующее приложение Windows, которое используется для экспорта данных SQL в формат Excel, а также группа категорий, которые являются вкладками (листами).
Вопрос: можно ли преобразовать этот код ввеб-форму, такую как .cshtml страница бритвы?Кроме того, я не хочу, чтобы код создавал файл Excel.У меня уже есть существующий файл в папке App_Data, который будет использоваться в качестве шаблона.
Так что если у кого-то возникла идея использовать тот же код, но просто сгенерировать новый веб-подход, не создавая файл Excel, а просто пользователяфайл шаблона и предоставьте Экспорт его для загрузки пользователем.
вот код:
static void Main(string[] args)
{
string conString = "Data Source="MyConnection String";
StringBuilder query = new StringBuilder();
query.Append("SELECT ProductPricing.ProductCategory");
query.Append(",[ItemNo] as Item_No, [reqNumbers] as Request_No, [StockCodes] ");
query.Append(",[Suppliers], [StockDesciption] as Stock_Description, [MaterialCosts] as Unit_Cost ");
query.Append(",[MarginReq] as Margin, [TotalProdPrice] as Total_Price,[pOnHold] as On_Hold ");
query.Append(",[pReplacement] as Replacement, [pCurrency] as Currency, [pDiscountinuedFlag] as Discountinued_Flag ");
query.Append("FROM [TMS].[dbo].[ProductPricing] ");
query.Append("WHERE ProductPricing.reqNumbers = 'RFQ / 384'");//"JOIN Categories ON Categories.CategoryID = Products.CategoryID ");
query.Append("ORDER BY ProductPricing.ProductCategory ");
SQL.DataTable dtProducts = new SQL.DataTable();
using (SqlConnection cn = new SqlConnection(conString))
{
using (SqlDataAdapter da = new SqlDataAdapter(query.ToString(), cn))
{
da.Fill(dtProducts);
}
}
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
//Anitialized
oXL = new Excel.Application();
oXL.Visible = true;
oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
try
{
SQL.DataTable dtCategories = dtProducts.DefaultView.ToTable(true, "ProductCategory");
foreach (SQL.DataRow category in dtCategories.Rows)
{
oSheet = (Excel._Worksheet)oXL.Worksheets.Add();
oSheet.Name = category[0].ToString().Replace(" ", "").Replace(" ", "").Replace("/", "").Replace("\\", "").Replace("*", "");
string[] colNames = new string[dtProducts.Columns.Count];
int col = 0;
foreach (SQL.DataColumn dc in dtProducts.Columns)
colNames[col++] = dc.ColumnName;
char lastColumn = (char)(65 + dtProducts.Columns.Count - 1);
oSheet.get_Range("A1", lastColumn + "1").Value2 = colNames;
oSheet.get_Range("A1", lastColumn + "1").Font.Bold = true;
oSheet.get_Range("A1", lastColumn + "1").Interior.Color = System.Drawing.Color.SeaShell;
oSheet.get_Range("A1", lastColumn + "1").VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
SQL.DataRow[] dr = dtProducts.Select(string.Format("ProductCategory='{0}'", category[0].ToString()));
string[,] rowData = new string[dr.Count<SQL.DataRow>(), dtProducts.Columns.Count];
int rowCnt = 0;
int redRows = 2;
foreach (SQL.DataRow row in dr)
{
for (col = 0; col < dtProducts.Columns.Count; col++)
{
rowData[rowCnt, col] = row[col].ToString();
}
if (int.Parse(row["Item_No"].ToString()) < int.Parse(row["Margin"].ToString()))
{
Range range = oSheet.get_Range("A" + redRows.ToString(), "M" + redRows.ToString());
range.Cells.Interior.Color = System.Drawing.Color.White;
}
redRows++;
rowCnt++;
//Gather the filter
}
if (rowCnt == 1)
{
rowCnt = 2;
}
oSheet.get_Range("A2", lastColumn + rowCnt.ToString()).Value2 = rowData;
}
oXL.Visible = true;
oXL.UserControl = true;
//oSheet = (Excel._Worksheet)oXL.Worksheets.Delete.;
oWB.SaveAs("ClientPricing.xlsx",
AccessMode: Excel.XlSaveAsAccessMode.xlShared);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Marshal.ReleaseComObject(oWB);
}
}