[英]excel integration with c# .net
我需要在運行時使用C#基於excel模板創建運輸標簽。
現在,我有了一個工作系統,在這里我要用數據庫值替換excel模板中的字段名稱,並將其發送以進行打印。
但是,如果數據庫中的值為null,則正在創建空間。 我不要那個空間。 在單個excel行中,需要替換2個以上的單元格,因此,如果不存在值,則僅需要刪除該單元格(因為我無法刪除行),並將其正好位於單元格下方移至該位置或合並它與下面的單元格。
如果您有更好的方法基於excel模板生成運輸標簽,請告訴我。
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
//string path = AppDomain.CurrentDomain.BaseDirectory + @printLabelName;
string fileLocation = "";
DataTable dtPath = clsData.getFileLocations();
if (dtPath.Rows.Count != 0)
{
//ctbExport.Text = dt.Rows[0]["exportFileLocation"].ToString();
fileLocation = dtPath.Rows[0]["printTemplateLocation"].ToString() + "\\";
}
String[] orderList = ctbOrderNo.Text.Split(' ');
for (int i = 0; i < orderList.LongLength; i++)
{
string strOrderNo = orderList[i];
int val = clsData.updOrderDataBulkPrint(Convert.ToDecimal(ctbCustomValue.Text), cmbCustomType.Text, strOrderNo);
DataTable dt = clsData.getOrderDetailByOrderNo(strOrderNo);
if (dt.Rows.Count == 0)
{
MessageBox.Show("Order No. " + strOrderNo + " doesn't exist");
return;
}
DataTable dtSender = clsData.getSenderDataById(Convert.ToInt32(cmbSender.SelectedValue));
if (dtSender.Rows.Count > 0 && dt.Rows.Count > 0)
{
//We will name shipping label excel template file names as number for e.g. 1 , 2 , 3 , 4 , 4 etc.
//user will put of these values and then system will know which shipping label excel template to use for all these orders.
string printLabelName = numUpDownPrintLabelRype.Value.ToString() + ".xlsx";
//string path = AppDomain.CurrentDomain.BaseDirectory + @printLabelName;
string path = fileLocation + @printLabelName;
bool isPathCorrect = true;
try
{
object missingValue = Type.Missing;
xlWorkBook = xlApp.Workbooks.Open(path, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//MessageBox.Show(xlWorkSheet.get_Range("A1", "A1").Value2.ToString());
xlWorkSheet.Cells.Replace("SenderName", dtSender.Rows[0]["senderName"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("SenderCompanyName", dtSender.Rows[0]["senderCompanyName"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("SenderAdressLine1", dtSender.Rows[0]["senderAdressLine1"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("SenderAddressLine2", dtSender.Rows[0]["senderAddressLine2"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("SenderCity", dtSender.Rows[0]["senderCity"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("SenderState", dtSender.Rows[0]["senderState"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("SenderZIP", dtSender.Rows[0]["senderZIP"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("SenderCountry", dtSender.Rows[0]["senderCountry"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("OrderNumber", dt.Rows[0]["orderNo"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("Zone", dt.Rows[0]["zone"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomerName", dt.Rows[0]["customerName"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomerCompanyName", dt.Rows[0]["cCompanyName"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
object misval = Type.Missing;
//Replace values by database values here
xlWorkSheet.Cells.Replace("CustomerAddressLine1", dt.Rows[0]["cAddressLine1"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomerAddressLine2", dt.Rows[0]["cAddressLine2"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomerAddressLine3", dt.Rows[0]["cAddressLine3"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomerAddressCity", dt.Rows[0]["cAddressCity"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomerAddressState", dt.Rows[0]["cAddressState"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomerAddressZIP", dt.Rows[0]["cAddressZIP"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomerAddressCountry", dt.Rows[0]["cAddressCountry"].ToString(), missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("ProductType", cmbProdType.Text, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomsType", cmbCustomType.Text, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkSheet.Cells.Replace("CustomsValue", ctbCustomValue.Text, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue);
xlWorkBook.PrintOut(1, 1, 1, false, misValue, misValue, misValue, misValue);
xlWorkBook.Close(false, misValue, misValue);
}
catch (Exception ex)
{
MessageBox.Show("Can't open Label Template, please check location.");
isPathCorrect = false;
}
}
else {
MessageBox.Show("This Sender doesn't exist.");
}
}
xlApp.Quit();
所以如果值不存在,那么我只需要刪除單元格(因為我不能刪除行),然后將其正下方的單元格移動到該位置或與下方的單元格合並
您要使用Excel PIA DLL(我確定您已經在使用的互操作DLL .Range.Delete(Shift)
的.Range.Delete(Shift)
方法。
找到要刪除的單元格后,請使用以下代碼(該部分的內容已從代碼示例中刪除):
xlWorkSheet.get_Range("A1", "A1").Delete(XlDeleteShiftDirection.xlShiftUp);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.