powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите написать экспорт в Excel
25 сообщений из 30, страница 1 из 2
Помогите написать экспорт в Excel
    #39830533
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Есть такая бухгалтерская программа, называется Xero. Мне нужно из нее наладить автоматический экспорт либо в Excel либо напрямую в базу SQL Server. По аналогии с ручным экпортом (Standard export.png в приложении). У этой программы есть API, которая возвращает инвойсы в виде объекта ("invoice object.png" & "C# object.png" в приложении).

Некоторые столбцы вытаскиваются легко, например:
invoice.Contact.Name

А некоторые выдают ошибку (error.png):
invoice.Contact.Addresses[0].AddressLine1

Думаю, что из-за того, что в у многих инвойсов значение отсутствует для AddressLine1, AddressLine2, AddressLine3, AddressLine4 (invoice object.png & standard export.png).

Я попробовал такой подход:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
private String convertInvoiceToString(Core.Model.Invoice invoice)
        {
            string result = "";
            result+= invoice.Contact.Name + "," + invoice.Contact.EmailAddress + "," + invoice.Number + "," + invoice.Reference + "," + invoice.Date + "," +
                  invoice.DueDate + "," + invoice.PlannedPaymentDate + "," + invoice.Total + "," + invoice.TotalTax + "," + invoice.AmountPaid + "," + invoice.AmountDue + ",";

            foreach   (string Address in invoice.Contact.Addresses) {
                           result+=                   invoice.Contact.Addresses[0].AddressLine1 + "," ;
           }
           return result;
        }


Ругается на эту строку:
Код: c#
1.
foreach   (string Address in invoice.Contact.Addresses) 


Cannot convert type 'Xero.Api.Core.Model.Address' to 'string'

Как это поправить?

А также, как тоже самое сделать отправляя данные напрямую в базу? На данный момент я использую экспорт в csv:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        private void GetInvoices()
        {
            List<Core.Model.Invoice> invoices = _api.Invoices.Find().ToList();
            int count = invoices.Count;
            int total = count;
            int page = 2;
            string filename = @"C:\Xero\Invoice_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".csv";
            saveInvoices(filename, invoices);
            while (count == 100)
            {
                invoices = _api.Invoices.Page(page++).Find().ToList();
                saveInvoices(filename, invoices);
                count = invoices.Count;
                total += count;
            }
        }



Модератор: Учимся использовать тэги оформления кода - FAQ

Не ругайте сильно, я не программер.

Форум не позволяет много приложений. Приложения здесь:
https://1drv.ms/u/s!At756qpwT4usgrgB3ZYf-2XMNikrvQ?e=F6bF9o


Спасибо.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830571
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
Вы пишите, что ошибка в методе convertInvoiceToString Cannot convert type 'Xero.Api.Core.Model.Address' to 'string' , а на скриншоте-ArgumentOutOfRangeException- 2 ошибки?
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830581
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subRoust_m,
Вы пишите, что ошибка в методе convertInvoiceToString Cannot convert type 'Xero.Api.Core.Model.Address' to 'string' , а на скриншоте-ArgumentOutOfRangeException- 2 ошибки?

На скриншоте ошибка когда я делаю вот так, без цикла:
Код: c#
1.
invoice.Contact.Addresses[0].AddressLine1



А если делаю так:
Код: c#
1.
2.
3.
foreach   (string Address in invoice.Contact.Addresses) {
                result+=                   invoice.Contact.Addresses[0].AddressLine1 + "," ;
}


То ошибка другая:
Cannot convert type 'Xero.Api.Core.Model.Address' to 'string'

Модератор, прошу прощения, забыл про теги оформления, когда вспомнил, то как отредактировать не нашел.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830596
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
Вам нужно обернуть Ваш инвойс в POCO класс и написать XML-десериализатор, который будет принимать invoice object и преобразовывать его в экземпляр класса. Мне не очень понятно, реализовано ли это у Вас, поэтому на всякий случай напишу.

Попробуйте заменить на

Код: c#
1.
2.
3.
foreach   (var Address in invoice.Contact.Addresses) {
                result+=                   invoice.Contact.Addresses[0].AddressLine1 + "," ;
}



и в точке останова посмотреть, что из себя представляет объект Address, и почему он не может быть конвертирован в строку.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830636
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subRoust_m,
Вам нужно обернуть Ваш инвойс в POCO класс и написать XML-десериализатор, который будет принимать invoice object и преобразовывать его в экземпляр класса. Мне не очень понятно, реализовано ли это у Вас, поэтому на всякий случай напишу.

Попробуйте заменить на

Код: c#
1.
2.
3.
foreach   (var Address in invoice.Contact.Addresses) {
                result+=                   invoice.Contact.Addresses[0].AddressLine1 + "," ;
}



и в точке останова посмотреть, что из себя представляет объект Address, и почему он не может быть конвертирован в строку.

Есть некоторый прогресс: компилирует я и не падает при выполнении, но в Экселе пустое значение для AddressLine1 для всех инвойсов, чего не может быть.
Address не публичный член и имеет сложную структуру (C# object.png по ссылке в первом посте).

Вот пример его преобразованного в XML:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<Address>
            <AddressType>POBOX</AddressType>
            <AddressLine1>Procurement</AddressLine1>
            <AddressLine2>GPO 1234</AddressLine2>
            <City>Melbourne</City>
            <PostalCode>3313</PostalCode>
</Address>
<Address>
            <AddressType>STREET</AddressType>
</Address>




Полная версия примера инвойса в "invoice object.xml" по ссылке в первом посте.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830664
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
Ваша проблема в Xero вой структуре возвращаемого XML-файла.
В одной секции
Код: xml
1.
2.
3.
4.
5.
6.
7.
<Address>
            <AddressType>POBOX</AddressType>
            <AddressLine1>Procurement</AddressLine1>
            <AddressLine2>GPO 1234</AddressLine2>
            <City>Melbourne</City>
            <PostalCode>3313</PostalCode>
</Address>

есть подтег AddressLine1,AddressLine2, а в другом таком же его нет
Код: xml
1.
2.
3.
<Address>
            <AddressType>STREET</AddressType>
</Address>


Вот из-за этого Вы и получаете ошибку- Ваш код ожидает, что в теге Address есть подтег AddressLine1
Код: c#
1.
 invoice.Contact.Addresses[0].AddressLine1


, а фактически его нет.
Варианты решений:
1) Если есть доступ к редактированию сервиса, то переписать выгружаемые XML, так чтобы они соответствовали предсказуемой схеме,
например для Вашего случая вторая секция должны быть
Код: xml
1.
2.
3.
4.
5.
6.
7.
<Address>
            <AddressType>STREET</AddressType>
            <AddressLine1></AddressLine1>
            <AddressLine2></AddressLine2>
            <City></City>
            <PostalCode></PostalCode>
</Address>


2) Если нет доступа, то тогда перед считыванием тегов делайте проверку на наличие узлов в XML файле.
PS. Пользуйтесь xml- ориентированными инструментами для парсинга- в данном случае они для Вас будут удобнее.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830700
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

Возможности редактирования нет. Есть API, с которой приходится работать. А как можно сделать проверку наличия узлов (прошу прощения за глупый вопрос, но я не разработчик).

Вот что у меня получилось:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
        private String convertInvoiceToString(Core.Model.Invoice invoice)
        {
            string result = "";
            result += invoice.Contact.Name + "," + invoice.Contact.EmailAddress + ",";
            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[0].AddressLine1 + ",";
            }
            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[0].AddressLine2 + ",";
            }
            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[0].AddressLine3 + ",";
            }
            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[0].AddressLine4 + ",";
            }
            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[0].City + ",";
            }
            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[0].Region + ",";
            }
            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[0].PostalCode + ",";
            }
            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[0].Country + ",";
            }

            result += invoice.Number + "," + invoice.Reference + "," + invoice.Date + "," + invoice.DueDate + "," + invoice.PlannedPaymentDate + "," + invoice.Total + "," + invoice.TotalTax + "," + invoice.AmountPaid + "," + invoice.AmountDue + ",";
            foreach (var LineItem in invoice.LineItems)
            {
                result += invoice.LineItems[0].ItemCode + "," + invoice.LineItems[0].Description + "," + invoice.LineItems[0].Quantity + "," + invoice.LineItems[0].UnitAmount + ",";
            }
            result += invoice.TotalDiscount + ",";
            foreach (var LineItem in invoice.LineItems)
            {
                result += invoice.LineItems[0].LineAmount + "," + invoice.LineItems[0].AccountCode + "," + invoice.LineItems[0].TaxType + "," + invoice.LineItems[0].TaxAmount + "," 
                    //+ invoice.LineItems[0].Tracking[0].Name + "," + invoice.LineItems[0].Tracking[0].Option + "," + invoice.LineItems[0].Tracking[1].Name + "," + invoice.LineItems[0].Tracking[1].Option
                    ;
            }
            result += invoice.CurrencyCode + "," + invoice.Type + "," + invoice.SentToContact + "," + invoice.Status;
            return result;
        }


        private void saveInvoices(string filename, List<Core.Model.Invoice> invoices)
        {
            using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename))
            {
                string headings = "ContactName,EmailAddress,POAddressLine1,POAddressLine2,POAddressLine3,POAddressLine4,POCity,PORegion,POPostalCode,POCountry,InvoiceNumber,Reference,InvoiceDate,DueDate,PlannedDate,Total,TaxTotal,InvoiceAmountPaid,InvoiceAmountDue,InventoryItemCode,Description,Quantity,UnitAmount,Discount,LineAmount,AccountCode,TaxType,TaxAmount TrackingName1,TrackingOption1,TrackingName2,TrackingOption2,Currency,Type,Sent,Status";
                file.WriteLine(headings);
                foreach (Core.Model.Invoice invoice in invoices)
                {
                    file.WriteLine(convertInvoiceToString(invoice));
                }
            }
        }
        private void GetInvoices()
        {
            List<Core.Model.Invoice> invoices = _api.Invoices.Find().ToList();
            int count = invoices.Count;
            int total = count;
            int page = 2;
            string filename = @"C:\Distrib\Xero\Invoice_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".csv";
            saveInvoices(filename, invoices);
            while (count == 100)
            {
                invoices = _api.Invoices.Page(page++).Find().ToList();
                saveInvoices(filename, invoices);
                count = invoices.Count;
                total += count;
            }
        }
        private int GetTotalInvoiceCount()
        {
            int count = _api.Invoices.Find().Count();
            int total = count;
            int page = 2;

            while (count == 100)
            {
                count = _api.Invoices.Page(page++).Find().Count();
                total += count;
            }

            return total;
        }



Вот этот кусок вообще пришлось закомментировать:
Код: c#
1.
 //+ invoice.LineItems[0].Tracking[0].Name + "," + invoice.LineItems[0].Tracking[0].Option + "," + invoice.LineItems[0].Tracking[1].Name + "," + invoice.LineItems[0].Tracking[1].Option


ибо дает ошибку:
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index'
Там наверное еще один внутренний цикл нужен.

У меня должно на выходе получиться то же самое что в файле SampleExport.csv по ссылке выше, а получается MyExport.csv. Простые элементы выводятся, а сложные пустые получаются. Плюс еще в некоторых местах выходит вот такое:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#NAME?

#NAME?
#NAME?
#NAME?

#NAME?
#NAME?

#NAME?
#NAME?

#NAME?



Полный пример XML от Xero в файле invoices.xml. Может там запятые попали?
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830711
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,

Что Вам конкретно нужно получить после обработки XML-файла?
PS. Если Вы не разработчик, то почему Вам приходится копаться в коде?
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830717
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subRoust_m,

Что Вам конкретно нужно получить после обработки XML-файла?
PS. Если Вы не разработчик, то почему Вам приходится копаться в коде?

Мне нужно получить файл подобный SampleExport.csv со всеми его столбцами.

Приходится копаться, потому, что контора маленькая. Задача выглядит достаточно тривиальная. Если я на примере инвойсов научусь этому экспорту, то смогу и другие вещи делать.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830725
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне хотя бы на паре примеров научиться вытаскивать такие вещи как:
Код: c#
1.
2.
3.
invoice.Contact.Addresses[0].AddressLine1
invoice.LineItems[0].Tracking[0].Name 
invoice.LineItems[0].Tracking[1].Name 



Остальное я по аналогиии сделаю.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830729
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По сути, почти все работает, если закоментарить сложные объекты, то экпорт получается как надо (понятно, что некоторые столбцы отсутствуют, но зато все аккуратно):

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
        private String convertInvoiceToString(Core.Model.Invoice invoice)
        {
            string result = "";
            result += invoice.Contact.Name + "," + invoice.Contact.EmailAddress + ",";
            //foreach (var Address in invoice.Contact.Addresses)
            //{
            //    result += invoice.Contact.Addresses[0].AddressLine1 + ",";
            //}
            //foreach (var Address in invoice.Contact.Addresses)
            //{
            //    result += invoice.Contact.Addresses[0].AddressLine2 + ",";
            //}
            //foreach (var Address in invoice.Contact.Addresses)
            //{
            //    result += invoice.Contact.Addresses[0].AddressLine3 + ",";
            //}
            //foreach (var Address in invoice.Contact.Addresses)
            //{
            //    result += invoice.Contact.Addresses[0].AddressLine4 + ",";
            //}
            //foreach (var Address in invoice.Contact.Addresses)
            //{
            //    result += invoice.Contact.Addresses[0].City + ",";
            //}
            //foreach (var Address in invoice.Contact.Addresses)
            //{
            //    result += invoice.Contact.Addresses[0].Region + ",";
            //}
            //foreach (var Address in invoice.Contact.Addresses)
            //{
            //    result += invoice.Contact.Addresses[0].PostalCode + ",";
            //}
            //foreach (var Address in invoice.Contact.Addresses)
            //{
            //    result += invoice.Contact.Addresses[0].Country + ",";
            //}

            result += invoice.Number + "," + invoice.Reference + "," + invoice.Date + "," + invoice.DueDate + "," + invoice.PlannedPaymentDate + "," + invoice.Total + "," + invoice.TotalTax + "," + invoice.AmountPaid + "," + invoice.AmountDue + ",";
            //foreach (var LineItem in invoice.LineItems)
            //{
            //    result += invoice.LineItems[0].ItemCode + "," + invoice.LineItems[0].Description + "," + invoice.LineItems[0].Quantity + "," + invoice.LineItems[0].UnitAmount + ",";
            //}
            result += invoice.TotalDiscount + ",";
            //foreach (var LineItem in invoice.LineItems)
            //{
            //    result += invoice.LineItems[0].LineAmount + "," + invoice.LineItems[0].AccountCode + "," + invoice.LineItems[0].TaxType + "," + invoice.LineItems[0].TaxAmount + "," 
            //        + invoice.LineItems[0].Tracking[0].Name + "," + invoice.LineItems[0].Tracking[0].Option + "," + invoice.LineItems[0].Tracking[1].Name + "," + invoice.LineItems[0].Tracking[1].Option
            //        ;
            //}
            result += invoice.CurrencyCode + "," + invoice.Type + "," + invoice.SentToContact + "," + invoice.Status;
            return result;
        }
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830733
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня на Github весь солюшн лежит. Могу дать доступ. Помогите пжлста.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830736
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
Вам нужно

1)Создать класс для хранения информации об объекте из XML.
Грубо говоря можете воспользоваться каким- либо сервисами типа xmltoCsharp, но лучше сделать все самому руками.
Будет что-то вроде:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   public  class MyClass
        {
            public string ContactName { get; set; }

            public string EmailAddress { get; set; }

            public string POAddressLine1 { get; set; }

            public string POAddressLine2 { get; set; }

            public string POAddressLine3 { get; set; }
  //и так далее
        }



2) Создайте метод, который буде на вход принимать xml, а на выходе будет отдавать коллекцию объектов MyClass.
В данном методе Вам нужно будет реализовать парсинг xml файла. Не читайте xml как текстовый файл. Используйте, что-то вроде
System.Xml или в крайний случай при правильной реализации и linq будет достаточно. В этом методе и реализуете проверки на наличие узлов, их чтение и преобразование в экземпляр класса MyClass.
3)Когда весь xml прочтете, у Вас будет коллекция MyClass, которую сможете или выгрузить в csv или записать в базу, на Ваш вкус.
Используйте nuget-пакеты для экспорта в excel, не помню точно как называется, но вроде есть пару рабочих.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830745
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subRoust_m,
Вам нужно

1)Создать класс для хранения информации об объекте из XML.
Грубо говоря можете воспользоваться каким- либо сервисами типа xmltoCsharp, но лучше сделать все самому руками.
Будет что-то вроде:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   public  class MyClass
        {
            public string ContactName { get; set; }

            public string EmailAddress { get; set; }

            public string POAddressLine1 { get; set; }

            public string POAddressLine2 { get; set; }

            public string POAddressLine3 { get; set; }
  //и так далее
        }



2) Создайте метод, который буде на вход принимать xml, а на выходе будет отдавать коллекцию объектов MyClass.
В данном методе Вам нужно будет реализовать парсинг xml файла. Не читайте xml как текстовый файл. Используйте, что-то вроде
System.Xml или в крайний случай при правильной реализации и linq будет достаточно. В этом методе и реализуете проверки на наличие узлов, их чтение и преобразование в экземпляр класса MyClass.
3)Когда весь xml прочтете, у Вас будет коллекция MyClass, которую сможете или выгрузить в csv или записать в базу, на Ваш вкус.
Используйте nuget-пакеты для экспорта в excel, не помню точно как называется, но вроде есть пару рабочих.

Я наверное неправильно объяснил, мне никто не дает XML, у меня есть API, который представляет каждый инвойс в виде объекта:
https://1drv.ms/u/s!At756qpwT4usgrgLXjzivUF_7HCr3Q?e=yfIfh9

Мне надо его преобразовать в Excel (csv).

XML это еще одно представление инвойсов, чтобы из XML его преобразовать, мне придется сначала его в XML загнать, а это получается двойная работа.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830746
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
Вам Api сразу предоставляет POCO экземпляр класса?
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830749
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subRoust_m,
Вам Api сразу предоставляет POCO экземпляр класса?

Не могу точно ответить на этот вопрос. Скорее всего да, все зашито.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830764
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
давайте Github, по возможности посмотрю.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830772
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub,

Я солюшн выложил в эту папку:
https://onedrive.live.com/?authkey=!AN2WH_tlzDYpK70&id=AC8B4F70AAEAF9DE!39937&cid=AC8B4F70AAEAF9DE

Подпапка "Xero-Net-master".

Можете сами попробовать.

Там только надо аккаунт у них завести и демо компанию создать:
https://developer.xero.com/documentation/getting-started/getting-started-guide

1. Get setup
Signup for a free Xero account
Enable the Xero demo company
Add your application (you’ll be prompted to login to Xero first)

После этого надо в солюшене ключи поменять:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
   public static class XeroApiHelper
    {
        private static ApplicationSettings _applicationSettings;

        static XeroApiHelper()
        {
            // Refer to README.md for details
            var callbackUrl = "http://localhost:61795/Home/Authorize";
            var sqliteTokenStore = new SqliteTokenStore();
            var requestTokenStore = new MemoryRequestTokenStore();
            var baseApiUrl = "https://api.xero.com";

            // Consumer details for Application
            var consumerKey = "Ключ от Вашего приложения";
            var consumerSecret = "Ключ от Вашего приложения";



Ключи беруться отсюда:
https://1drv.ms/u/s!At756qpwT4usgr1hMgRsHSirWCmPQg?e=yfuTeq
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830922
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subRoust_m,
давайте Github, по возможности посмотрю.

Пока писал ответ, не заметил пост. А на какой логин Гитхаба выслать доступ?
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39830963
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
напиши в дискорд
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39831844
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_subRoust_m,
напиши в дискорд

Написал.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39835671
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чем смысл сих строк?

Код: c#
1.
2.
3.
foreach   (var Address in invoice.Contact.Addresses) {
                result+=                   invoice.Contact.Addresses[0].AddressLine1 + "," ;
}



ты в цикле получаешь переменную Address, но не используешь ее, а принудительно всегда берешь Addresses[0]... Выглядит странно.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39836620
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iskatelsqlа в чем смысл сих строк?

Код: c#
1.
2.
3.
foreach   (var Address in invoice.Contact.Addresses) {
                result+=                   invoice.Contact.Addresses[0].AddressLine1 + "," ;
}



ты в цикле получаешь переменную Address, но не используешь ее, а принудительно всегда берешь Addresses[0]... Выглядит странно.

Это мне подсказали так сделать. Я сам не вполне понимаю, думаю это вариант проверки существования этого нода в объекте. Не у всех инвойсов есть даже AddressLine1, но их может быть до 4-х:
AddressLine1, AddressLine2, AddressLine3, AddressLine4.
А когда доходит до нодов типа:
invoice.LineItems[0].Tracking[1].Name

То получается два вложенных цикла надо делать, чтобы просто проверить существование ноды. Выглядит криво, думаю есть способ получше, но пока я его не нашел.
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39836632
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я переписал этот кусок, так будет наверное более правильно:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
        private String convertInvoiceToString(Core.Model.Invoice invoice)
        {
            string result = "";
            result += invoice.Contact.Name + "," + invoice.Contact.EmailAddress + ",";
            int i = 0;

            foreach (var Address in invoice.Contact.Addresses)
            {
                result += invoice.Contact.Addresses[i].AddressLine1 + "," + invoice.Contact.Addresses[i].AddressLine2 + "," + invoice.Contact.Addresses[i].AddressLine3 + "," + invoice.Contact.Addresses[i].AddressLine4
                     + "," + invoice.Contact.Addresses[i].City + "," + invoice.Contact.Addresses[i].Region + "," + invoice.Contact.Addresses[i].PostalCode + "," + invoice.Contact.Addresses[i].Country;
                i += 1;
            }
            result += invoice.Number + "," + invoice.Reference + "," + invoice.Date + "," + invoice.DueDate + "," + invoice.PlannedPaymentDate + "," + invoice.Total + "," + invoice.TotalTax + "," + invoice.AmountPaid + "," + invoice.AmountDue + ",";
            i = 0;
            foreach (var LineItem in invoice.LineItems)
            {
                result += invoice.LineItems[i].ItemCode + "," + invoice.LineItems[i].Description + "," + invoice.LineItems[i].Quantity + "," + invoice.LineItems[i].UnitAmount + "," + invoice.LineItems[i].LineAmount + "," +
                    invoice.LineItems[i].AccountCode + "," + invoice.LineItems[i].TaxType + "," + invoice.LineItems[i].TaxAmount + "," //+ invoice.LineItems[i]. + ","
                    ;
                int j = 0;
                foreach (var Tracking in invoice.LineItems[i].Tracking)
                {
                    result += invoice.LineItems[i].Tracking[j].Name + "," + invoice.LineItems[i].Tracking[j].Option + ",";
                    j += 1;
                }
                i += 1;
            }
            result += invoice.TotalDiscount + ",";
            result += invoice.CurrencyCode + "," + invoice.Type + "," + invoice.SentToContact + "," + invoice.Status;
            return result;
        }
...
Рейтинг: 0 / 0
Помогите написать экспорт в Excel
    #39836634
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_mЯ переписал этот кусок, так будет наверное более правильно:
Код: c#
1.
result += invoice.Number + "," + invoice.Reference + "," + invoice.Date + "," + invoice.DueDate + "," + invoice.PlannedPaymentDate + "," + invoice.Total + "," + invoice.TotalTax + "," + invoice.AmountPaid + "," + invoice.AmountDue + ",";


Жесть. Вообще за такое по рукам бьют. Откройте для себя класс StringBuilder .
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите написать экспорт в Excel
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]