i have a number of sheets with sales information on different products. each sale has an orderNumber assigned to it, usually one orderNumber will cover numerous sales (ex. 3 balls, 2 shoes, and 5 hats all at differ prices). i want to print an orderReceipt, so have the user search for an order number 12345 and then loop through each sheet (ea. sheet is a product), check if orderNumber column has 12345 in any of its cells, if it does, store all other data in that row for that orderNumber, (i.e. cost, quantity sold, etc.) and store this in a string array.
current code:
// declare variables and arrays here
for (int i = 1; i < sheetNum; i++)
{
xlWorkSheet = (Excel.Worksheet)xlSheets.get_Item(i);
chartRange = xlWorkSheet.UsedRange;
string counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
// read all rows it data
while (counterColumn != null)
{
if (counterColumn == orderNumber)
{
date[i] = Convert.ToString((chartRange.Cells[counterVar, 3] as Excel.Range).Value2);
component[i] = Convert.ToString((chartRange.Cells[1, 1] as Excel.Range).Value2);
cost[i] = Convert.ToString((chartRange.Cells[counterVar, 7] as Excel.Range).Value2);
quantityPurchased[i] = Convert.ToString((chartRange.Cells[counterVar, 5] as Excel.Range).Value2);
quantitySold[i] = Convert.ToString((chartRange.Cells[counterVar, 6] as Excel.Range).Value2);
valuePurchased[i] = Convert.ToString((chartRange.Cells[counterVar, 9] as Excel.Range).Value2);
valueSold[i] = Convert.ToString((chartRange.Cells[counterVar, 10] as Excel.Range).Value2);
receiptRow[i] = date[i] + "\t \t" + component[i] + "\t $" + cost[i] + "\t" + quantityPurchased[i] + "\t $" + valuePurchased[i] + "\t" + quantitySold[i] + "\t $" + valueSold[i];
}
else
{
counterVar++;
counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
}
}
}
Loading
PJ MartinsPosted May 27, 2010, 2:24 PM
string orderNumber = lblOrderNumber.Text;
int sheetNum = xlWorkBook.Worksheets.Count;
int counterVar = 2;
string description = richTextBoxDescription.Text;
StringBuilder sb = new StringBuilder();
sb.AppendLine("Transaction Receipt\t \t \t" + orderNumber);
sb.AppendLine("-------------------------------------------------------------------------------------------------------");
sb.AppendLine("");
sb.AppendLine(description);
sb.AppendLine("\t \t \t \t \t Purchased\t \t Sold");
sb.AppendLine("Date\t \tComponent\tCost\tQty\tValue\t \tQty\tValue");
for (int i = 1; i < sheetNum; i++)
{
xlWorkSheet = (Excel.Worksheet)xlSheets.get_Item(i);
chartRange = xlWorkSheet.UsedRange;
string counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
if (string.IsNullOrEmpty(counterColumn)) continue;
for (counterVar = 2; counterVar < chartRange.Rows.Count; counterVar++)
{
counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
if (counterColumn == orderNumber)
{
sb.AppendLine(Convert.ToString((chartRange.Cells[counterVar, 3] as Excel.Range).Value2) + "\t \t" +
Convert.ToString((chartRange.Cells[1, 1] as Excel.Range).Value2) + "\t $" +
Convert.ToString((chartRange.Cells[counterVar, 7] as Excel.Range).Value2) + "\t" +
Convert.ToString((chartRange.Cells[counterVar, 5] as Excel.Range).Value2) + "\t $" +
Convert.ToString((chartRange.Cells[counterVar, 9] as Excel.Range).Value2) + "\t" +
Convert.ToString((chartRange.Cells[counterVar, 6] as Excel.Range).Value2)+ "\t $" +
Convert.ToString((chartRange.Cells[counterVar, 10] as Excel.Range).Value2));
}
}
}
MessageBox.Show(sb.ToString());
PJ MartinsPosted May 28, 2010, 12:33 PM
Matthew PawelkePosted May 28, 2010, 10:26 AM
thanks for the help previously though
Matthew PawelkePosted May 28, 2010, 8:28 AM
for (int i = 1; i < sheetNum; i++)
{
xlWorkSheet = (Excel.Worksheet)xlSheets.get_Item(i);
chartRange = xlWorkSheet.UsedRange;
for (int counterVar = 2; counterVar < xlWorkSheet.Rows.Count; counterVar++)
{
string counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Text);
if (counterColumn == orderNumber)
{
sb.AppendLine(Convert.ToString((chartRange.Cells[counterVar, 3] as Excel.Range).Text) + "\t \t" +
Convert.ToString((chartRange.Cells[1, 1] as Excel.Range).Value2) + "\t \t $" +
Convert.ToString((chartRange.Cells[counterVar, 7] as Excel.Range).Value2) + "\t \t" +
Convert.ToString((chartRange.Cells[counterVar, 5] as Excel.Range).Value2) + "\t $" +
Convert.ToString((chartRange.Cells[counterVar, 9] as Excel.Range).Value2) + "\t" +
Convert.ToString((chartRange.Cells[counterVar, 6] as Excel.Range).Value2) + "\t \t $" +
Convert.ToString((chartRange.Cells[counterVar, 10] as Excel.Range).Value2));
}
}
}
Matthew PawelkePosted May 28, 2010, 8:03 AM
{
string orderNumber = lblOrderNumber.Text;
int sheetNum = xlWorkBook.Worksheets.Count;
string description = richTextBoxDescription.Text;
StringBuilder sb = new StringBuilder();
sb.AppendLine("Transaction Receipt\t \t \t" + orderNumber);
sb.AppendLine("-------------------------------------------------------------------------------------------------------");
sb.AppendLine("");
sb.AppendLine(description);
sb.AppendLine("\t \t \t \t \t Purchased\t \t Sold");
sb.AppendLine("Date\t \tComponent\tCost\tQty\tValue\t \tQty\tValue");
for (int i = 1; i < sheetNum; i++)
{
xlWorkSheet = (Excel.Worksheet)xlSheets.get_Item(i);
chartRange = xlWorkSheet.UsedRange;
sb.AppendLine(Convert.ToString((chartRange.Cells[3, 3] as Excel.Range).Value2) + "\t \t" +
Convert.ToString((chartRange.Cells[1, 1] as Excel.Range).Value2) + "\t $" +
Convert.ToString((chartRange.Cells[3, 7] as Excel.Range).Value2) + "\t" +
Convert.ToString((chartRange.Cells[3, 5] as Excel.Range).Value2) + "\t $" +
Convert.ToString((chartRange.Cells[3, 9] as Excel.Range).Value2) + "\t" +
Convert.ToString((chartRange.Cells[3, 6] as Excel.Range).Value2) + "\t $" +
Convert.ToString((chartRange.Cells[3, 10] as Excel.Range).Value2));
}
MessageBox.Show(sb.ToString());
}
Matthew PawelkePosted May 28, 2010, 7:37 AM
PJ MartinsPosted May 27, 2010, 3:22 PM
for (int i = 1; i <= sheetNum; i++)
{
xlWorkSheet = (Excel.Worksheet)xlSheets.get_Item(i);
chartRange = xlWorkSheet.UsedRange;
string counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
for (counterVar = 2; counterVar <= chartRange.Rows.Count; counterVar++)
{
counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
if (string.IsNullOrEmpty(counterColumn)) continue;
if (counterColumn == orderNumber)
{
sb.AppendLine(Convert.ToString((chartRange.Cells[counterVar, 3] as Excel.Range).Text) + "\t \t" +
Convert.ToString((chartRange.Cells[1, 1] as Excel.Range).Value2) + "\t $" +
Convert.ToString((chartRange.Cells[counterVar, 7] as Excel.Range).Value2) + "\t" +
Convert.ToString((chartRange.Cells[counterVar, 5] as Excel.Range).Value2) + "\t $" +
Convert.ToString((chartRange.Cells[counterVar, 9] as Excel.Range).Value2) + "\t" +
Convert.ToString((chartRange.Cells[counterVar, 6] as Excel.Range).Value2)+ "\t $" +
Convert.ToString((chartRange.Cells[counterVar, 10] as Excel.Range).Value2));
}
}
}
Matthew PawelkePosted May 27, 2010, 2:56 PM
thanks for all the help
PJ MartinsPosted May 27, 2010, 2:49 PM
Matthew PawelkePosted May 27, 2010, 2:33 PM
Matthew PawelkePosted May 27, 2010, 2:18 PM
string orderNumber = lblOrderNumber.Text;
int sheetNum = xlWorkBook.Worksheets.Count;
int counterVar = 2;
string description = richTextBoxDescription.Text;
string[] receiptRow = new string[sheetNum];
string[] date = new string[sheetNum];
string[] component = new string[sheetNum];
string[] cost = new string[sheetNum];
string[] quantityPurchased = new string[sheetNum];
string[] quantitySold = new string[sheetNum];
string[] valuePurchased = new string[sheetNum];
string[] valueSold = new string[sheetNum];
for (int i = 1; i < (sheetNum - 6); i++)
{
xlWorkSheet = (Excel.Worksheet)xlSheets.get_Item(i);
chartRange = xlWorkSheet.UsedRange;
string counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
for (counterVar = 2; counterVar < chartRange.Rows.Count; counterVar++)
{
counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
if (counterColumn == orderNumber)
{
date[i] = Convert.ToString((chartRange.Cells[counterVar, 3] as Excel.Range).Value2);
component[i] = Convert.ToString((chartRange.Cells[1, 1] as Excel.Range).Value2);
cost[i] = Convert.ToString((chartRange.Cells[counterVar, 7] as Excel.Range).Value2);
quantityPurchased[i] = Convert.ToString((chartRange.Cells[counterVar, 5] as Excel.Range).Value2);
quantitySold[i] = Convert.ToString((chartRange.Cells[counterVar, 6] as Excel.Range).Value2);
valuePurchased[i] = Convert.ToString((chartRange.Cells[counterVar, 9] as Excel.Range).Value2);
valueSold[i] = Convert.ToString((chartRange.Cells[counterVar, 10] as Excel.Range).Value2);
receiptRow[(i + 6)] = date[i] + "\t \t" + component[i] + "\t $" + cost[i] + "\t" + quantityPurchased[i] + "\t $" + valuePurchased[i] + "\t" + quantitySold[i] + "\t $" + valueSold[i] + "\n";
}
if (string.IsNullOrEmpty(counterColumn)) continue;
}
}
receiptRow[0] = "Transaction Receipt" + "\t \t \t" + orderNumber + "\n";
receiptRow[1] = "-------------------------------------------------------------------------------------------------------" + "\n";
receiptRow[2] = "" + "\n";
receiptRow[3] = description + "\n";
receiptRow[4] = "\t \t \t \t \t" + " Purchased" + "\t \t" + " Sold" + "\n";
receiptRow[5] = "Date" + "\t \t" + "Component" + "\t" + "Cost" + "\t" + "Qty" + "\t" + "Value" + "\t \t" + "Qty" + "\t" + "Value" + "\n";
MessageBox.Show(receiptRow[0] + receiptRow[1] + receiptRow[2] + receiptRow[3] + receiptRow[4] + receiptRow[5] + receiptRow[9]);
PJ MartinsPosted May 27, 2010, 2:08 PM
Matthew PawelkePosted May 27, 2010, 2:04 PM
...
if (string.IsNullOrEmpty(counterColumn)) continue;
}
}
receiptRow[0] = "Transaction Receipt" + "\t \t \t" + orderNumber + "\n";
receiptRow[1] = "-------------------------------------------------------------------------------------------------------" + "\n";
receiptRow[2] = "" + "\n";
receiptRow[3] = description + "\n";
receiptRow[4] = "\t \t \t \t \t" + " Purchased" + "\t \t" + " Sold" + "\n";
receiptRow[5] = "Date" + "\t \t" + "Component" + "\t" + "Cost" + "\t" + "Qty" + "\t" + "Value" + "\t \t" + "Qty" + "\t" + "Value" + "\n";
MessageBox.Show(receiptRow[0] + receiptRow[1] + receiptRow[2] + receiptRow[3] + receiptRow[4] + receiptRow[5] + receiptRow[9]);
edit:
the first 6 elements are just to format my file for notepad, probably an easier way but i guess this works,
PJ MartinsPosted May 27, 2010, 2:02 PM
Matthew PawelkePosted May 27, 2010, 1:53 PM
Matthew PawelkePosted May 27, 2010, 1:49 PM
for (int i = 1; i < sheetNum; i++)
{
xlWorkSheet = (Excel.Worksheet)xlSheets.get_Item(i);
chartRange = xlWorkSheet.UsedRange;
string counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
for (counterVar = 2; counterVar < chartRange.Rows.Count; counterVar++)
{
counterColumn = Convert.ToString((chartRange.Cells[counterVar, 2] as Excel.Range).Value2);
if (counterColumn == orderNumber)
{
date[i] = Convert.ToString((chartRange.Cells[counterVar, 3] as Excel.Range).Value2);
component[i] = Convert.ToString((chartRange.Cells[1, 1] as Excel.Range).Value2);
cost[i] = Convert.ToString((chartRange.Cells[counterVar, 7] as Excel.Range).Value2);
quantityPurchased[i] = Convert.ToString((chartRange.Cells[counterVar, 5] as Excel.Range).Value2);
quantitySold[i] = Convert.ToString((chartRange.Cells[counterVar, 6] as Excel.Range).Value2);
valuePurchased[i] = Convert.ToString((chartRange.Cells[counterVar, 9] as Excel.Range).Value2);
valueSold[i] = Convert.ToString((chartRange.Cells[counterVar, 10] as Excel.Range).Value2);
receiptRow[(i + 6)] = date[i] + "\t \t" + component[i] + "\t $" + cost[i] + "\t" + quantityPurchased[i] + "\t $" + valuePurchased[i] + "\t" + quantitySold[i] + "\t $" + valueSold[i] + "\n";
}
if (string.IsNullOrEmpty(counterColumn)) continue;
}
}
PJ MartinsPosted May 27, 2010, 1:42 PM
for (int j = 1; j <= chartRange.Rows.Count; j++)
{
counterColumn = Convert.ToString((chartRange.Cells[j, 2] as Excel.Range).Value2);
if (string.IsNullOrEmpty(counterColumn)) continue;
}
The continue statement will immediately skip to the next row
Matthew PawelkePosted May 27, 2010, 1:35 PM
PJ MartinsPosted May 27, 2010, 8:45 AM
Change
while (counterColumn != null)
to
while (!string.IsNullOrEmpty(counterColumn))
and see if you still get stuck.
Matthew PawelkePosted May 27, 2010, 7:48 AM
i tried switching my loop order but didn't make a difference. i think the problem is the nested loop, either way its ordered its getting caught somewhere and doesn't terminate. I think the code itself is ok but any suggestions on the logic would be great
thanks!
PJ MartinsPosted May 26, 2010, 3:54 PM
for (int j = 1; j <= chartRange.Rows.Count; j++)
{
counterColumn = Convert.ToString((chartRange.Cells[j, 2] as Excel.Range).Value2);
}
Also make sure you loop your i to <= sheetNum else the last work sheet will not get checked.