C# में एपीआई प्रतिक्रियाओं को Excel रिपोर्ट में कैसे परिवर्तित करें

C# में एपीआई प्रतिक्रियाओं को Excel रिपोर्ट में कैसे परिवर्तित करें

आज के डेटा-आधारित दुनिया में, कंपनियां डेटिंग एक्सचेंज के लिए आरईएसटी एपीआई पर भारी भरोसा करती हैं. हालांकि, कई हितधारकों को विश्लेषण और रिपोर्टिंग के रूप में एक्सेल प्रारूप में इस जानकारी का उपभोग करना पसंद है. यह गाइड दिखाता है कि एक पूर्ण सी # अनुप्रयोग कैसे बनाया जाए जो:

  • बाकी एपीआई से कनेक्ट करें
  • JSON प्रतिक्रिया डेटा रिटर्न
  • डेटा को पेशेवर रूप से प्रारूपित Excel रिपोर्ट में परिवर्तित करता है
  • चार्ट और तालिकाओं के साथ दृश्यता को बढ़ाएं

बिजनेस मूल्य

यह समाधान महत्वपूर्ण मूल्य प्रदान करता है:

  • मैन्युअल डेटा निकालने और रिपोर्ट बनाने की प्रक्रियाओं को स्वचालित करना
  • मैन्युअल कॉपी को खत्म करके डेटा सटीकता सुनिश्चित करें
  • एक निरंतर रिपोर्ट प्रारूपण प्रदान करना
  • अनुसूचित रिपोर्ट जनरेटिंग की अनुमति

चरण-दर-चरण कार्यान्वयन मार्गदर्शिका

चरण 1: एक नया C# एप्लिकेशन बनाएं

एक नया एप्लिकेशन बनाकर शुरू करें:

dotnet new console -n ApiToExcelReporter
cd ApiToExcelReporter

चरण 2: आवश्यक पैकेज स्थापित करें

आवश्यक NuGet पैकेज जोड़ें:

dotnet add package Aspose.Cells
dotnet add package Newtonsoft.Json
dotnet add package RestSharp

चरण 3: REST API क्लाइंट को लागू करें

एपीआई संचार के लिए एक सेवा बनाएं:

using RestSharp;
using Newtonsoft.Json;
using System;
using System.Threading.Tasks;

public class ApiService
{
    private readonly RestClient _client;
    
    public ApiService(string baseUrl)
    {
        _client = new RestClient(baseUrl);
    }
    
    public async Task<T> GetApiDataAsync<T>(string endpoint, string apiKey = null)
    {
        var request = new RestRequest(endpoint, Method.Get);
        
        // Add authentication if needed
        if (!string.IsNullOrEmpty(apiKey))
        {
            request.AddHeader("Authorization", $"Bearer {apiKey}");
        }
        
        var response = await _client.ExecuteAsync(request);
        
        if (response.IsSuccessful)
        {
            return JsonConvert.DeserializeObject<T>(response.Content);
        }
        
        throw new Exception($"API call failed: {response.ErrorMessage}");
    }
}

चरण 4: प्रक्रिया JSON प्रतिक्रिया डेटा

JSON डेटा को संसाधित करने के लिए एक वर्ग जोड़ें:

using Newtonsoft.Json.Linq;
using System.Collections.Generic;

public class DataProcessor
{
    public List<Dictionary<string, object>> FlattenJsonData(string jsonData)
    {
        var results = new List<Dictionary<string, object>>();
        JToken token = JToken.Parse(jsonData);
        
        // Handle different JSON structures
        if (token is JArray array)
        {
            foreach (var item in array)
            {
                results.Add(FlattenObject(item));
            }
        }
        else if (token is JObject obj)
        {
            // For nested data like {"data": [{...}, {...}]}
            var dataToken = obj["data"] as JArray;
            if (dataToken != null)
            {
                foreach (var item in dataToken)
                {
                    results.Add(FlattenObject(item));
                }
            }
            else
            {
                results.Add(FlattenObject(obj));
            }
        }
        
        return results;
    }
    
    private Dictionary<string, object> FlattenObject(JToken token)
    {
        var result = new Dictionary<string, object>();
        FillDictionary(result, token, "");
        return result;
    }
    
    private void FillDictionary(Dictionary<string, object> dict, JToken token, string prefix)
    {
        switch (token.Type)
        {
            case JTokenType.Object:
                foreach (var prop in token.Children<JProperty>())
                {
                    FillDictionary(dict, prop.Value, 
                        string.IsNullOrEmpty(prefix) ? prop.Name : $"{prefix}.{prop.Name}");
                }
                break;
                
            case JTokenType.Array:
                int index = 0;
                foreach (var item in token.Children())
                {
                    FillDictionary(dict, item, $"{prefix}[{index}]");
                    index++;
                }
                break;
                
            default:
                dict[prefix] = ((JValue)token).Value;
                break;
        }
    }
}

चरण 5: Aspose.Cells के साथ Excel में परिवर्तित करें

Excel रूपांतरण को लागू करें:

using Aspose.Cells;
using Aspose.Cells.Utility;
using System;
using System.Collections.Generic;
using System.IO;

public class ExcelReportGenerator
{
    public void GenerateReport(string jsonData, string outputPath)
    {
        // Create a new workbook
        Workbook workbook = new Workbook();
        Worksheet sheet = workbook.Worksheets[0];
        
        // Configure JSON layout options
        JsonLayoutOptions options = new JsonLayoutOptions
        {
            ArrayAsTable = true,
            ConvertNumericOrDate = true,
            IgnoreNull = true
        };
        
        // Make headers bold
        options.TitleStyle = new CellsFactory().CreateStyle();
        options.TitleStyle.Font.IsBold = true;
        
        // Import JSON data
        JsonUtility.ImportData(jsonData, sheet.Cells, 0, 0, options);
        
        // Auto-fit columns
        sheet.AutoFitColumns();
        
        // Save the workbook
        workbook.Save(outputPath);
    }
    
    public void GenerateReportFromObjects(List<Dictionary<string, object>> data, string outputPath)
    {
        Workbook workbook = new Workbook();
        Worksheet sheet = workbook.Worksheets[0];
        
        // Add headers if there's data
        if (data.Count > 0)
        {
            int col = 0;
            foreach (var key in data[0].Keys)
            {
                // Add header with styling
                Cell cell = sheet.Cells[0, col];
                cell.PutValue(key);
                
                Style style = cell.GetStyle();
                style.Font.IsBold = true;
                cell.SetStyle(style);
                
                col++;
            }
            
            // Add data rows
            for (int row = 0; row < data.Count; row++)
            {
                col = 0;
                foreach (var value in data[row].Values)
                {
                    sheet.Cells[row + 1, col].PutValue(value);
                    col++;
                }
            }
        }
        
        // Format as a table
        if (data.Count > 0)
        {
            int lastRow = data.Count;
            int lastCol = data[0].Count - 1;
            
            var tableRange = sheet.Cells.CreateRange(0, 0, lastRow + 1, lastCol + 1);
            sheet.ListObjects.Add(tableRange, "DataTable");
        }
        
        // Auto-fit columns
        sheet.AutoFitColumns();
        
        // Save the workbook
        workbook.Save(outputPath);
    }
}

चरण 6: पेशेवर प्रारूपण जोड़ें

पेशेवर स्टाइलिंग के साथ Excel आउटपुट में सुधार करें:

public void ApplyProfessionalFormatting(Workbook workbook)
{
    Worksheet sheet = workbook.Worksheets[0];
    
    // Create a style for the title
    Style titleStyle = workbook.CreateStyle();
    titleStyle.Font.Size = 14;
    titleStyle.Font.IsBold = true;
    titleStyle.HorizontalAlignment = TextAlignmentType.Center;
    
    // Add a title to the report
    sheet.Cells.Merge(0, 0, 1, sheet.Cells.MaxColumn + 1);
    Cell titleCell = sheet.Cells[0, 0];
    titleCell.PutValue("API Data Report - " + DateTime.Now.ToString("yyyy-MM-dd"));
    titleCell.SetStyle(titleStyle);
    
    // Insert a blank row after the title
    sheet.Cells.InsertRow(1);
    
    // Apply alternating row colors to the data
    Style evenRowStyle = workbook.CreateStyle();
    evenRowStyle.ForegroundColor = Color.FromArgb(240, 240, 240);
    evenRowStyle.Pattern = BackgroundType.Solid;
    
    int dataStartRow = 3; // Accounting for title and blank row
    int lastRow = sheet.Cells.MaxRow;
    
    for (int row = dataStartRow; row <= lastRow; row += 2)
    {
        for (int col = 0; col <= sheet.Cells.MaxColumn; col++)
        {
            sheet.Cells[row, col].SetStyle(evenRowStyle);
        }
    }
    
    // Add page header and footer
    sheet.PageSetup.SetHeader(1, "&\"Arial,Bold\"&14API Report");
    sheet.PageSetup.SetFooter(1, "Page &P of &N");
    
    // Set print options
    sheet.PageSetup.Orientation = PageOrientationType.Landscape;
    sheet.PageSetup.FitToPagesWide = 1;
    sheet.PageSetup.TopMargin = 0.5;
    sheet.PageSetup.LeftMargin = 0.5;
    sheet.PageSetup.RightMargin = 0.5;
    sheet.PageSetup.BottomMargin = 0.5;
}

चरण 7: डेटा दृश्य जोड़ें

चार्ट के साथ रिपोर्ट को सुधारें:

public void AddChartVisualization(Workbook workbook, int dataColumn)
{
    Worksheet sheet = workbook.Worksheets[0];
    Worksheet chartSheet = workbook.Worksheets.Add("Chart Analysis");
    
    // Get the data range (skip header row)
    int lastRow = sheet.Cells.MaxRow;
    int nameColumn = 0; // Assuming first column has names/categories
    
    // Add a chart
    int chartIndex = chartSheet.Charts.Add(ChartType.Column, 2, 2, 20, 10);
    Chart chart = chartSheet.Charts[chartIndex];
    
    // Set the data range for the chart
    chart.NSeries.Add($"Sheet1!B2:B{lastRow + 1}", true);
    chart.NSeries.CategoryData = $"Sheet1!A2:A{lastRow + 1}";
    
    // Set chart title and other properties
    chart.Title.Text = "Data Analysis";
    chart.Legend.Position = LegendPositionType.Bottom;
    
    // Additional chart customization
    chart.NSeries[0].Area.ForegroundColor = Color.FromArgb(79, 129, 189);
    chart.PlotArea.Area.ForegroundColor = Color.White;
    
    // Add data labels
    chart.NSeries[0].DataLabels.IsValueShown = true;
    chart.NSeries[0].DataLabels.Position = DataLabelPositionType.OutsideEnd;
}

चरण 8: इसे एक साथ रखें

मुख्य कार्यक्रम बनाएं जो सब कुछ एक साथ जोड़ता है:

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        try
        {
            // Configure API endpoint
            string baseUrl = "https://api.example.com";
            string endpoint = "/data/endpoint";
            string apiKey = "your-api-key"; // If needed
            
            // Connect to API and get data
            Console.WriteLine("Connecting to API...");
            var apiService = new ApiService(baseUrl);
            var jsonData = await apiService.GetApiDataAsync<string>(endpoint, apiKey);
            
            Console.WriteLine("Data retrieved successfully");
            
            // Generate Excel report
            Console.WriteLine("Generating Excel report...");
            var reportGenerator = new ExcelReportGenerator();
            
            // Option 1: Direct JSON to Excel conversion
            string outputPath = "ApiReport_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".xlsx";
            reportGenerator.GenerateReport(jsonData, outputPath);
            
            // Option 2: Process JSON and create enhanced report
            // var processor = new DataProcessor();
            // var processedData = processor.FlattenJsonData(jsonData);
            // reportGenerator.GenerateReportFromObjects(processedData, outputPath);
            
            Console.WriteLine($"Report saved to {outputPath}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

विभिन्न एपीआई प्रतिक्रिया संरचनाओं को संभालना

REST APIs विभिन्न प्रारूपों में डेटा वापस करते हैं. यहाँ सामान्य संरचनाओं को संभालने का तरीका है:

1. वस्तुओं की संख्या

[
  { "id": 1, "name": "Product A", "price": 29.99 },
  { "id": 2, "name": "Product B", "price": 49.99 }
]

इस संरचना के लिए, उपयोग करें:

JsonLayoutOptions options = new JsonLayoutOptions();
options.ArrayAsTable = true;
JsonUtility.ImportData(jsonData, sheet.Cells, 0, 0, options);

2. Data Array के साथ Nested Object

{
  "status": "success",
  "data": [
    { "id": 1, "name": "Product A", "price": 29.99 },
    { "id": 2, "name": "Product B", "price": 49.99 }
  ]
}

“डेटा” श्रृंखला निकालने के लिए डेटा प्रोसेसर वर्ग का उपयोग करें, या:

// Parse with Newtonsoft.Json
JObject jsonObj = JObject.Parse(jsonData);
JArray dataArray = (JArray)jsonObj["data"];

// Convert to string and import
string dataArrayJson = dataArray.ToString();
JsonUtility.ImportData(dataArrayJson, sheet.Cells, 0, 0, options);

3. नारियल और वस्तुएं

{
  "categories": [
    {
      "name": "Electronics",
      "products": [
        { "id": 1, "name": "Laptop", "price": 999.99 },
        { "id": 2, "name": "Phone", "price": 699.99 }
      ]
    },
    {
      "name": "Books",
      "products": [
        { "id": 3, "name": "Novel", "price": 14.99 }
      ]
    }
  ]
}

जटिल संरचनाओं के लिए, कई कार्यपत्रक बनाएं:

// Parse the JSON
JObject root = JObject.Parse(jsonData);
JArray categories = (JArray)root["categories"];

// Create a worksheet for each category
foreach (var category in categories)
{
    string categoryName = category["name"].ToString();
    Worksheet sheet = workbook.Worksheets.Add(categoryName);
    
    // Get and import the products array
    JArray products = (JArray)category["products"];
    JsonUtility.ImportData(products.ToString(), sheet.Cells, 0, 0, options);
}

इसे अगले स्तर पर ले जाएं: अनुसूची रिपोर्ट

रिपोर्ट जनरेटिंग को स्वचालित करने के लिए, कार्यक्रम क्षमताओं को जोड़ें:

// Install Task Scheduler package
// dotnet add package TaskScheduler

using Microsoft.Win32.TaskScheduler;

public void ScheduleDailyReportGeneration(string appPath)
{
    using (TaskService ts = new TaskService())
    {
        // Create a new task
        TaskDefinition td = ts.NewTask();
        td.RegistrationInfo.Description = "Daily API Data Report Generation";
        
        // Create a trigger that will fire daily at 7am
        td.Triggers.Add(new DailyTrigger { StartBoundary = DateTime.Today.AddHours(7) });
        
        // Create an action that will run the application
        td.Actions.Add(new ExecAction(appPath));
        
        // Register the task in the root folder
        ts.RootFolder.RegisterTaskDefinition("DailyApiReport", td);
    }
}

विचार करने के लिए उन्नत विशेषताएं

  • ** ईमेल डिलीवरी** - स्वचालित रूप से ईमेल के माध्यम से रिपोर्ट भेजें
  • Multi-API Integration - कई एपीआई से डेटा का संयोजन
  • चैम्पलेट-आधारित रिपोर्ट - एक निरंतर ब्रांडिंग के लिए एक्सेल चैंपल का उपयोग करें
  • Dashboard Creation - इंटरैक्टिव Excel डैशबोर्ड उत्पन्न करें
  • ** त्रुटियों का ट्रैकिंग और रिपोर्टिंग** - लॉग समस्याओं और सफलता / विफलता की रिपोर्ट

इस मार्गदर्शिका का पालन करके, आपने एक मजबूत सी # एप्लिकेशन बनाया है जो एपीआई डेटा को पुनर्प्राप्त करने और इसे पेशेवर एक्सेल रिपोर्ट में परिवर्तित करने की प्रक्रिया को स्वचालित करता है – समय बचाता है, सटीकता सुनिश्चित करती है और व्यापार मूल्य प्रदान करता हूं।

 हिंदी