Preface

During the past weeks and months, I have started working quite intensively with the Odoo Importer / Exporter again. Admittedly, I have avoided using them for many years, because I did not like the handling, felt overwhelmed by the field list, and never really knew where to start. Whenever I generated an export, I only got database IDs but no distinct values. Somehow, I felt cheated, having made up my mind to use the features and, as I half expected, ending up with nothing really useful. Consequently, I stopped using it again; as the saying goes, after all, water usually takes the path of least resistance.

This time, however, I had no other choice: For a customer, I had to somehow put a huge Excel table into Odoo to create an initial database. After looking at all the lists with their more than 200 columns, representing almost a complete database export, and combining many coherent units (a true classic, as it were), I decided to use the Odoo Import feature, despite my misgivings. It seemed preferable compared to explaining the process to a colleague, checking it, discussing corrections and reviewing it again, ad infinitum. How bad was it going to get, anyway? After all, this feature exists since I started working with the system.

Here are some impressions from my practical experience:

In general

I have to admit that I needed time to get used to working with these features, but it did not take as long as I expected. With a little knowledge of Excel and the Import/Export function, you can do pretty much anything. If you are still on the look-out for mass-update modules, you have obviously never worked with these features either, because, in combination with Excel, you have a real winning team!

Odoo is able to save a vast amount of data. Consequently, the field lists are incredibly long. Since none of the data are saved redundantly but are interlinked, a lot of information is distributed to sub-records. But there is almost unlimited access to both import and export – which does not shorten the field lists though.

But with a few little tips on handling (which we want to share in the course of this blog), the underbrush will clear up rapidly.

Import

If you want to import something, you will find (rights for creating data provided) the Import feature in the top menu next to the “Create” button. Independent of your view type, the option is only linked to your individual access rights. If you click on it, the file browser appears, and you can select an Excel or CSV file.

The second step entails the mapping of the fields in the import file for Odoo. The system will try to assign the fields according to name, using the technical field names, the English, and the translated designations for comparison.

Note

If you want to use the import feature only once or think the import will succeed in a single attempt due to the low amount of data and the resulting low potential for error, the names of the column headers are not particularly relevant. In this case, the mapping that needs to be repeated before each new attempt will not be as time-consuming.

If the Excel sheet is vast, however, and you have to assume that you need several attempts for a successful import, or such an import will be performed regularly, the original names of the columns should be replaced by the technical names of the Odoo counterpart.

You can do this quite easily by exporting the same data from one or two data sets and copying the column names of the resulting file into your own. We will discuss later how to find the correct fields.

Relational Data

If corresponding values are missing in a drop-down list and the list of values is customizable, it is possible since Odoo 13 to create them at the same time. However, I would strongly advise against this option, since each import has an impact on quality in one form or another.

You can use this option also to create addresses together with orders, that is, with the underlying data records. But, again, I would advise against it: In this case, you should start two or more separate Imports. First, because of the data quality, because Odoo simply imports and does not necessarily check whether a particular entry or a similar one already exists. Besides, the mapping takes a lot of time, and the file is relatively complex. You have to observe a specific order; otherwise, the result may be somewhat unexpected (we will discuss the “complex structure” later). Since there is no “undo“ function, you need to contact the admin and activate a backup. If it has been several hours after the last backup, I would not like to sit in the responsible party’s chair.

Small units

In addition, you should be careful not to import large lists. I have already hinted at a few reasons in the previous paragraphs. The most critical reason probably is that you want to avoid such a complex structure in an import file because then the Odoo Importer does not need to comprehend which information belongs to which level.

Example

So, if you want to import contacts and companies, you can do it in a single process. The first columns have to be assignable to the respective company, followed by a vertical mental cut, and all columns after this cut should be assignable to the respective contact. If you intend to import these files, Odoo will first create addresses for companies and then import the corresponding contacts.

This procedure sounds quite convenient and definitely better than doing the import in two steps. Because doing it in two steps would entail that the second part needs to be told somehow how to recognize the first, working with names and even IDs. But you can only obtain these IDs by re-exporting the already imported part and finding the respective assignments in the second Excel sheet.

This is, of course, far from convenient. So why should this procedure be better?

Minimizing errors

In my experience, this procedure usually leads to incorrect field assignments. After all, each company does have an address, a postal code, a city – and so does the corresponding contact. In other words, if you were to map these data by hand, there is a risk that you click on the wrong button and select an incorrect field. With each mistake, you have to repeat the process, thus increasing the risk with each new attempt. If you work with technical field names to avoid the manual mapping, you actually will have to pay attention to the order of the respective columns (more on that later). And even I am bound to misplace a field or two, experienced import user or not.

Other than that, I often come across content-related errors when disassembling or re-assigning data. If this is the case, I can address these errors to the sender of the data import.

Upload

Until now, I have never paid attention to time, so I cannot prove that the procedure described above is actually more efficient. However, smaller tables simply speed up the upload, the calculation of Odoo’s mapping proposal, and, of course, the waiting time.

In conclusion

You should use small “import units“ for your import. Work with an export of the Odoo reference set, using the function SLOOKUP in Excel to create assignments between data sets.